谷歌浏览器出现<select>元素</select>的错误

时间:2013-03-29 00:06:04

标签: javascript html google-chrome webkit click

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/

1 个答案:

答案 0 :(得分:3)

将事件处理程序放在select元素而不是option上,它将适用于所有浏览器。使用changekeyup事件:

$('#page').on( 'change keyup', function() {
    var selected = this.value;
    if( selected == 'about' )
        alert( 'About!' );
});

Updated fiddle

为什么同时发生changekeyup事件? change事件处理鼠标交互,当您使用箭头键或其他键在选择器中向上和向下导航时,keyup使选择器响应。

或者,您可以省略keyup,只收听change事件。然后,如果您打开选择器并使用光标键上下导航,则在您按Enter键之前不会发生任何事情。这将触发change事件。

在许多情况下,使用键盘在列表中上下导航时向用户提供即时反馈会更有帮助,并且听change keyup会这样做。

为什么change代替click?您可以使用其中任何一个,但click事件会在任何点击时触发,即使该值实际上没有更改。 OTOH,即使用户只是点击已经选择的选项,您也可以想要触发事件,因此在这种情况下,click事件会更好。

实际上,经过多次测试后,clickchange问题相比还有一些问题。与选择列表的正常鼠标交互允许两种略有不同的使用方式:

  1. 在选择器上按下鼠标,按住鼠标,将其翻过一个选项,最后将其释放。

  2. 在选择器上按下鼠标并将其释放。选择器打开以显示选项。将鼠标滑过选项(此时按钮未关闭)​​,最后单击选项上的按钮。

  3. 如果您收听click事件而不是change,那么在#2情况下,事件将在初始点击和最终点击选择一个选项时触发两次。因此,您可以使用clickchange,具体取决于您是要两次点击还是仅选择最终选项。

    我必须补充一点,我没有彻底测试click,但我已经非常彻底地测试了changechange keyup,所以我更信任它们。