$('select').bind('click contextmenu',function(ev){
})
ev.target
始终为select
,而不是option
。
我怎么知道现在点击哪一个?
不要告诉我这样做:
$('option').bind('click contextmenu',function(ev){
})
因为它在IE8中不受支持,你可以自己测试一下!
修改
它还应支持右键点击,这会触发contextmenu
事件
答案 0 :(得分:1)
您可以对选择框使用更改事件,并可以使用以下内容查找当前选定的项目。
$("#sel").change ( function() {
alert ( $(this).find("option:selected").val() );
});
答案 1 :(得分:1)
<option>
无法捕获IE中的事件。它没有独立的生命;选择框是IE中单个不可分割的OS小部件,因此单击选项将始终为<select>
元素生成单击事件。
虽然您理论上可能会猜测从event.clientY
属性中单击了哪个选项,但这需要您确切知道IE如何呈现菜单,包括正在使用的字体(在您的控件中),以及弹出菜单是向下还是向上弹出或者是否触及屏幕边缘,因此与选择元素不对齐(根本不在您的控制范围内)。对于一个非常简短的菜单,你可能希望它总是向下打开并从那里计算,但它并不真正可靠。几乎总是最好让点击通过,然后看看之后选择了哪个选项。
关于oncontextmenu
,请忘掉它。右键单击IE中的<option>
不会执行任何操作,也不会生成任何事件。如果您需要可右键单击的菜单,则必须使用基于JavaScript div的弹出式模拟替换<select>
。
答案 2 :(得分:0)
我想一个解决方案可能是检查value
的新select
:它应该来自您刚刚点击的option
用户。
或者您也可以查看selectedIndex
的{{1}}属性:它还应该指向刚刚选择的select
。
答案 3 :(得分:0)
只需对select元素使用val() - 方法:
$('select').bind('click contextmenu',function(ev){
var value = $(this).val();
})
OR:
$('select').change(function(ev){
var value = $(this).val();
})
答案 4 :(得分:0)
这是以jquery文档为例
$("select").change(function () {
var str = "";
$("select option:selected").each(function () {
str += $(this).text() + " ";
});
$("div").text(str);
})
.trigger('change');
答案 5 :(得分:0)
您可以使用所选属性。像这样:
$("#YourSelect option:selected");