HTML:
<select id="page">
<option value="none">--</option>
<option id="about" value="about">About</option>
</select>
JS:
document.getElementById('about').onclick = function(){
alert('normal onclick');
}
$("#about").click(function(){
alert("jquery click")
});
它们都不适用于Chrome,而且似乎只适用于Chrome
发生了什么?
这里是jsfiddle:http://jsfiddle.net/S9ZK3/2/
答案 0 :(得分:3)
将事件处理程序放在select
元素而不是option
上,它将适用于所有浏览器。使用change
和keyup
事件:
$('#page').on( 'change keyup', function() {
var selected = this.value;
if( selected == 'about' )
alert( 'About!' );
});
为什么同时发生change
和keyup
事件? change
事件处理鼠标交互,当您使用箭头键或其他键在选择器中向上和向下导航时,keyup
使选择器响应。
或者,您可以省略keyup
,只收听change
事件。然后,如果您打开选择器并使用光标键上下导航,则在您按Enter键之前不会发生任何事情。这将触发change
事件。
在许多情况下,使用键盘在列表中上下导航时向用户提供即时反馈会更有帮助,并且听change keyup
会这样做。
为什么change
代替click
?您可以使用其中任何一个,但click
事件会在任何点击时触发,即使该值实际上没有更改。 OTOH,即使用户只是点击已经选择的选项,您也可以想要触发事件,因此在这种情况下,click
事件会更好。
实际上,经过多次测试后,click
与change
问题相比还有一些问题。与选择列表的正常鼠标交互允许两种略有不同的使用方式:
在选择器上按下鼠标,按住鼠标,将其翻过一个选项,最后将其释放。
在选择器上按下鼠标并将其释放。选择器打开以显示选项。将鼠标滑过选项(此时按钮未关闭),最后单击选项上的按钮。
如果您收听click
事件而不是change
,那么在#2情况下,事件将在初始点击和最终点击选择一个选项时触发两次。因此,您可以使用click
或change
,具体取决于您是要两次点击还是仅选择最终选项。
我必须补充一点,我没有彻底测试click
,但我已经非常彻底地测试了change
和change keyup
,所以我更信任它们。