2012-02-13 65 views
0

这里是我的代码:如何将事件处理程序绑定到<option>

$(".multiple").each(function() { 
     $(this).bind("mousedown",function() { 
      alert(); 
     }); 
    }); 

这里是它适用于HTML:

<select> 
<option value = "textbox">TextBox</option> 
<option class = "multiple" value = "multiplechoice">MultipleChoice</option> 
<option class = "multiple" value = "dropdown">DropDown</option> 
</select> 

我希望看到某种警告框,但它似乎不起作用。我怎样才能解决这个问题?

+0

'alert();'没有显示任何内容,因为第一个参数是**必需**。指定任何参数以使其起作用。即使'void 0'也能完成这项工作。我通常使用'alert(0)'进行快速调试。 – 2012-02-13 23:00:13

回答

3

我不确定您是否可以将事件绑定到option元素,因为它们是由浏览器绘制的,属于shadow DOM(我认为)。 It doesn't work for me at least in Chrome 17

你可以,但是,这样做...

$('select').change(function() { 
    alert('Selected is ' + $(this).find('option:selected').text()); 
}); 

jsFiddle

+0

这里存在问题...当用户点击已经选择的选项时,事件不会触发 – 2012-02-13 22:53:35

0

这样的事情可能吗?

$('.multiple').change(function(){ 
    alert('something'); 
    }); 

HTML:

<select class="multiple"> 
<option value = "textbox">TextBox</option> 
<option value = "multiplechoice">MultipleChoice</option> 
<option value = "dropdown">DropDown</option> 
</select> 
+0

那里有问题...当用户点击已经选择的选项时,事件不会触发 – 2012-02-13 22:54:51

0

不要去那里 - 从经验。这不是一个跨浏览器解决方案。 我的建议是,在select的“change”事件中,测试当前选择的选项是否具有“multiple”类,如果是,则运行特定的逻辑。

+0

这里有一个问题...当用户点击已经选择的选项时,事件不会触发 – 2012-02-13 22:54:39

+0

因此,只有在srcElement是选项标记时,他才能注册以单击选择并右键单击相同的逻辑(而不是的变化)。 – nadavy 2012-02-14 00:00:28

+0

我们会,我的坏。在所有情况下,“select”都是srcElement。但是,您可以将此小提琴视为解决方案。我所做的是注册点击事件,现在我可以控制部分逻辑,如果这些值发生了变化,而其他部分则没有。基本上,我们有充分的控制: http://jsfiddle.net/am4ca/ – nadavy 2012-02-14 00:10:15

0

你可以在选择捕捉事件,并通过选项类过滤它

$('select').change(function() { 
    var o = $(this).find('option:selected'); 
    if ('multiple' != o.attr('class')) { 
     return; 
    } 
    alert('Clicked: ' + o.text()); 
}); 

你也可以使用click()而不是change()得到不导致变化的点击,但你会得到也会将选择下降的点击,也就是说,如果您的选择是size="1"。这种方法需要您的事件处理程序来解决误报,因此不鼓励。

相关问题