把select
元素而不是option
上的事件处理程序,它会在所有的浏览器。使用change
和keyup
事件:
$('#page').on('change keyup', function() {
var selected = this.value;
if(selected == 'about')
alert('About!');
});
Updated fiddle
为什么两个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
,所以我相信那些更多。
我不认为你可以添加点击处理程序到Chrome的“
仅在Chrome上发生了吗? –
您的代码在IE9中工作 – andyb