0
$('select').bind('click contextmenu',function(ev){

})

ev.target永远是一个select,不是option

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

不要告诉我这样做:

$('option').bind('click contextmenu',function(ev){

})

因为IE8不支持,可以自己测试!

编辑

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

4

6 回答 6

1

您可以使用选择框的更改事件,并可以使用以下内容找到当前选定的项目。

$("#sel").change ( function() {
    alert ( $(this).find("option:selected").val() );
});
于 2009-12-09T12:14:10.290 回答
1

<option>无法在 IE 中捕获事件。它没有自己独立的生命;选择框是 IE 中单个不可分割的操作系统小部件,因此单击选项将始终为<select>元素生成单击事件。

虽然理论上您可能会猜测从event.clientY属性中单击了哪个选项,但这需要您确切知道 IE 是如何呈现菜单的,包括正在使用的字体(在您的控制范围内),以及弹出菜单是否已弹出向下或向上或碰到屏幕边缘,与选择元素不对齐(根本不在您的控制范围内)。对于一个非常短的菜单,您可能希望它总是向下打开并从那里计算,但这并不可靠。几乎总是最好让点击通过,然后再查看选择了哪个选项。

至于oncontextmenu,算了。在 IE 中右键单击<option>什么都不做,根本不会生成任何事件供您捕获。如果您想要可右键单击的菜单,则必须将您的替换<select>为基于 JavaScript div 的弹出式类似物。

于 2009-12-09T12:52:07.903 回答
0

您可以使用 selected 属性。像这样的东西:

$("#YourSelect option:selected");
于 2009-12-09T12:15:14.360 回答
0

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

或者你也可以检查你的selectedIndex属性select:它也应该指向option刚刚选择的那个。

于 2009-12-09T12:12:32.867 回答
0

只需在选择元素上使用 val() 方法:

$('select').bind('click contextmenu',function(ev){
    var value = $(this).val();
})

或者:

$('select').change(function(ev){
    var value = $(this).val();
})
于 2009-12-09T12:13:02.100 回答
0

这是以jquery文档为例

 $("select").change(function () { 
          var str = ""; 
          $("select option:selected").each(function () { 
                str += $(this).text() + " "; 
              }); 
          $("div").text(str); 
        }) 
        .trigger('change'); 

选择器/选择

于 2009-12-09T12:13:41.257 回答