我看到了非常奇怪的行为 - 在Firefox中,如果你有一个没有选择任何项目的选择下拉列表,onchange事件将触发onblur - 即使你只是将焦点更改为页面上的其他元素。我的选择只是一个普通的选择:
<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时会触发。我知道代码本身确实有效。
复制步骤:
这仅适用于在下拉列表中选择任何项目之前。一旦做出选择,就不会发生
答案 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');
}
});