在select元素(组合)中,当元素失去焦点时执行change事件,是否可以在使用箭头键进行组合更改时执行change事件?
我尝试在所有组合中使用:
$('select').live('keyup',function(e) {
if ([33, 34, 35, 36, 37, 38, 39, 40].indexOf(e.keyCode) != -1)
{
///obj.blur();
obj.change();
///obj.focus();
}
});
使用firefox工作,但在chrome中使用箭头键启动了两次更改
答案 0 :(得分:0)
当您使用密钥更改change
值时,您同时触发了keyup
事件和select
事件,并且由于keyup
事件触发了change
事件1}}事件,该事件被触发两次,一次来自select
元素的原始更改,一次触发change
事件中的keyup
。
为了避免触发它两次,你可以检查事件originalEvent
或类似的东西,但简单的解决方案是只使用一个标记,该标记保持足够长的时间不能执行相同的东西两次:
var flag=true;
$('select').on({
keyup: function(e){
flag=false;
if ([33, 34, 35, 36, 37, 38, 39, 40].indexOf(e.which) !=-1) $(this).trigger('change');
setTimeout(function() {flag=true}, 200);
},
change: function(e) {
if (flag) {
//do stuff here
}
}
});
请注意Array.indexOf()
不是跨浏览器!