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