首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查实际单击了哪个<option>?

问如何检查实际单击了哪个<option>?
EN

Stack Overflow用户
提问于 2009-12-09 12:08:41
回答 5查看 483关注 0票数 0
代码语言:javascript
复制
$('select').bind('click contextmenu',function(ev){    
})

ev.target总是一个select,而不是option。

我怎么知道现在点击的是哪一个?

我不能这么做:

代码语言:javascript
复制
$('option').bind('click contextmenu',function(ev){    
})

因为它在IE8中不受支持,所以您可以自己测试它!

它还应该支持右键单击,这会触发contextmenu事件。

EN

回答 5

Stack Overflow用户

发布于 2009-12-09 12:52:07

<option>无法捕获IE中的事件。它没有独立的生命周期;在IE中,选择框是单个不可分割的OS小部件,因此单击一个选项总是会为<select>元素生成一个单击事件。

虽然理论上您可能猜到哪个选项是从event.clientY属性中单击的,但这将要求您准确地知道IE是如何呈现菜单的,包括哪些字体正在使用(在您的控制范围内),以及弹出菜单是向下弹出还是向上弹出,还是在屏幕边缘与select元素(完全不在您的控制范围内)对齐。对于一个非常短的菜单,您可以希望它总是向下打开,并从那里计算,但它并不是真正可靠的。这几乎总是最好的让点击通过,只是看看哪个选项被选中之后。

至于oncontextmenu,算了吧。右键单击IE中的<option>什么也不做,没有生成任何事件供您捕捉。如果你想要正确点击菜单,你将不得不用一个基于JavaScript div的弹出模拟替换你的JavaScript。

票数 1
EN

Stack Overflow用户

发布于 2009-12-09 12:12:32

我想一个解决方案可能是检查新的value of select:它应该是用户刚刚单击的来自option的那个。

或者您也可以检查您的selectedIndex属性:它还应该指向刚刚选择的option。

票数 0
EN

Stack Overflow用户

发布于 2009-12-09 12:13:02

只需在select元素上使用val()-method:

代码语言:javascript
复制
$('select').bind('click contextmenu',function(ev){
    var value = $(this).val();
})

或:

代码语言:javascript
复制
$('select').change(function(ev){
    var value = $(this).val();
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1873503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档