我能否防止模糊事件的发生?

19

我有一个简单的例子,其中我有一个input字段,并在其上放置了blurchange事件:

HTML

<input name="test" value=""/>

JavaScript

$('input').change(function(e){

 alert('change'); 

});

$('input').blur(function(e){

 alert('blur'); 
});

如果触发了change事件,有没有可能防止blur事件发生?一种方法是定义一个布尔值,在触发change事件时更改它,但我不喜欢这种方法,是否有更好的方法呢?您可以在此处尝试一个示例。

4个回答

18

通过这个链接解决了问题。

 $('input').change(function(e){
  alert('change'); 
   e.stopImmediatePropagation();
   $(this).off("blur");
 });

$('input').focus(function(e){
   $(this).on("blur", function(e){
   e.stopImmediatePropagation();
   e.preventDefault();
  alert('blur'); });
});

4

使用 .off 方法

演示

$('input').change(function(e){
  alert('change'); 
  e.stopImmediatePropagation();
  $(this).off("blur"); //$("input[name='test']").off("blur");
});

$('input').blur(function(e){  
  e.preventDefault();
 alert('blur'); 
});​

现在 blur() 不起作用了。当失去 input 元素的焦点时,它不起作用。 - Akhil
1
首先,最好使用$(this)而不是$("input[name='test']"),其次,就像@MattLin提到的那样,它完全删除了模糊事件。 - Tomer
@MattLin,模糊事件何时触发? - Pragnesh Chauhan
2
当元素失去焦点时,blur事件将被发送到该元素。最初,此事件仅适用于表单元素,例如<input>。在最近的浏览器中,该事件的范围已扩展到包括所有元素类型。元素可以通过键盘命令(如Tab键)或通过页面上其他位置的鼠标点击来失去焦点。 - Akhil

1

在 onchange 调用中,您可以使用 this.unbind('blur');


但是我不想失去我的模糊事件,我只想在触发更改事件的情况下防止它发生... - Tomer

0

这不起作用,你只有return;阻止了警报的发生... - Tomer
1
好的,我以为你指的是其他的事情。在这种情况下,你可以手动检查http://jsbin.com/asubog/1/edit,但是.off()似乎更干净。 - s.Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接