1 回答
在元素上放置一个事件处理程序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
vs change
. 问题还有更多内容。与选择列表的正常鼠标交互允许使用两种略有不同的方式:
在选择器上按住鼠标,按住它,将其滚动到一个选项上,最后释放它。
在选择器上按下鼠标并释放它。选择器打开以显示选项。将鼠标滚动到选项上(此时按钮未按下),最后单击选项上的按钮。
如果您侦听click
事件而不是change
,则在 #2 的情况下,事件会触发两次,分别是在初始单击和最终单击时选择一个选项。因此,您可以使用click
orchange
取决于您是否想要两次点击或只是最终的选项选择。
我必须补充一点,我在click
这里没有彻底测试过,但我已经测试过change
并且change keyup
非常彻底,所以我更信任那些。