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