【问题标题】:Google Chrome's bug onclick of <select> elements谷歌浏览器的 <select> 元素点击错误
【发布时间】:2013-03-29 09:02:42
【问题描述】:

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/

【问题讨论】:

标签: javascript html google-chrome webkit click


【解决方案1】:

在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 的问题还有一点。与选择列表的普通鼠标交互允许使用两种略有不同的方式:

  1. 在选择器上按住鼠标,按住不放,将其滚动到选项上,最后松开。

  2. 在选择器上按下鼠标然后松开。选择器打开以显示选项。将鼠标滚动到选项上(此时按钮未按下),最后单击某个选项上的按钮。

如果您侦听click 事件而不是change,则在#2 事件中触发两次,分别在初始单击和最终单击选择一个选项时触发。因此,您可以使用click 或change,具体取决于您想要两次点击还是只选择最终选项。

我必须补充一点,我没有在这里彻底测试过click,但我已经非常彻底地测试了change 和change keyup,所以我更相信它们。

【讨论】:

  • ...请阅读上面的cmets,我不是在问怎么做...我在问这是不是一个错误...不知何故我没有足够的投票否决@_o的声誉
  • Michael,您确定使用键盘选择选项时不会触发 change 事件吗?
  • “好东西,谢谢...我想我只是在点击时检查选择本身的值” -> 这是我的 cmets 之一
  • @yefrem - 我添加了一些关于事件的细节。当您使用光标键或字母数字键在列表中导航时,不会触发 change 事件。当您最终按下 Enter 键时,change 会被触发。键盘导航确实会触发 keyup 事件,因此您可以在适当的时候使用它来使选择更具响应性。
  • @MichaelGeary 感谢您的澄清,我从来没有为下拉列表添加keyup 监听器,所以您的评论让我有点害怕。我刚刚检查过:当用户使用 TAB 激活下拉菜单然后使用箭头选择选项时select 事件仅在下拉菜单失去焦点(再次按下 TAB)后才会触发,因此添加 keyup 侦听器确实是个好主意。感谢您的建议。
猜你喜欢
  • 2014-09-16
  • 2015-01-01
  • 2016-10-30
  • 2015-03-17
  • 2021-11-08
  • 1970-01-01
  • 2022-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多