Jquery 1.4 - 选择 - onchange在没有点击的情况下解雇 - Firefox

时间:2013-07-01 11:59:26

标签: jquery html

我看到了非常奇怪的行为 - 在Firefox中,如果你有一个没有选择任何项目的选择下拉列表,onchange事件将触发onb​​lur - 即使你只是将焦点更改为页面上的其他元素。我的选择只是一个普通的选择:

<select id="mySelect">
        <option value="Value0">Value 0</option>
        <option value="Value1">Value 1</option>
        <option value="Value2">Value 2</option>
</select>

我的js是:

$("#mySelect").change(function(){
    alert('Change event fired'); 
});

$("#mySelect").attr('selectedIndex', '-1');

请参阅此jsfiddle:http://jsfiddle.net/W8QR4/

如果我没有实际点击了一个新选项(除了升级到更新版本的jquery之外),有没有办法防止onchange被触发。我知道,我现在已经坚持了)?

更改事件在SHOULDNT时会触发。我知道代码本身确实有效。

复制步骤:

  1. 点击选择
  2. 的小向下箭头
  3. 将鼠标悬停在值1或值2上,但不选择
  4. 点击其他输入 - 两次,以便从选择中删除焦点并传递给其他元素
  5. 这仅适用于在下拉列表中选择任何项目之前。一旦做出选择,就不会发生

1 个答案:

答案 0 :(得分:0)

以下是我提出的答案,随时评论/改进:

$("#mySelect").attr('selectedIndex', '-1');

//Capture the initial selection of each dropdown
$('select').each(function() {
    $(this).data('initialSelection', String($(this).attr('selectedIndex')));
});

//Add click event to all options. When clicked, change initial selection and unbind the click event
$('select option').click(function() {
    $(this).parent().data('initialSelection', '').attr('selectedIndex', this.index).find('option').unbind('click');
});

//Onchange, check if initial selection is still -1. (If there is a click it will be reset to '') 
//Otherwise, it was just a hover - reset selected index to -1
$('select').change(function(e){
    if($(this).data('initialSelection') == '-1'){
         $(this).attr('selectedIndex', '-1');
    }
});