Events mootools禁用或拦截添加的事件

Events mootools禁用或拦截添加的事件,events,mootools,intercept,Events,Mootools,Intercept,假设我这样做: $('field').addEvents ({ 'focus' : function() { // do some stuff } 'blur' : function() { // do other stuff } }); 这是我所有文本输入字段的默认行为。我现在想做的是这样的事情 戳我一下 然后: 因此: 1) 如何停止DefaultBlurFunctionInirentlyFocusedField() 2) 如何判断我是否真的完成了严重的LycoolStuff?严格

假设我这样做:

$('field').addEvents ({
  'focus' : function() { // do some stuff }
  'blur' : function() { // do other stuff }
});
这是我所有文本输入字段的默认行为。我现在想做的是这样的事情

戳我一下

然后:

因此:

1) 如何停止DefaultBlurFunctionInirentlyFocusedField()


2) 如何判断我是否真的完成了严重的LycoolStuff?

严格来说,你不能做你想做的事情,因为
模糊事件在你的点击处理程序之前触发

Dimitar建议禁用mouseover上的事件,这对鼠标用户来说很好,但会阻止用户用键盘触发按钮

一个选项(但有点小技巧)是在
blur
事件处理程序中引入一个微小的延迟,并使用一个可变标志来控制事件触发(您可能需要调整延迟,使其不易察觉,但仍然足够长:

var disableBlurMethod = false;

$('field').addEvents ({
  'focus' : function() { // do some stuff }
  'blur' : function() {
    (function() {
      if (!disableBlurMethod) {
        // do some stuff
      }
    }).delay(50);
  }
});

$('shinyButton').addEvent('click', function() {
  disableBlurMethod = true;
  // do seriously cool stuff
  if (finishedDoingSeriouslyCoolStuff) {
    disableBlurMethod = false;
    $('field').focus();  // return focus to input field
  }
}

在聚焦于字段的同时单击按钮是一件棘手的事情,它会触发模糊和单击。您可以在模糊回调上使用一个小的延迟,您可以在单击时清除它-这并不理想,因为由于鼠标停留的时间比预期的长,因此单击可能是一个长的单击-或者您可以将所有这些委派给父窗体wh在你可以检查eventTargets等之前…这不是一项简单的任务。你也可以在按钮上添加mouseover事件,在模糊检查和优雅退出的字段上设置一个标志…明白了。因此出于我的意图和目的:不:D再次感谢@Dimitar。作为旁注,我看到你也是自学成才的。给我希望!哈哈,不,可以工作。检查-就像我说的,如果你把鼠标移到提交上,就会在必填字段上禁用模糊事件,这样点击它就不会触发字段验证。任何其他模糊都会。
var disableBlurMethod = false;

$('field').addEvents ({
  'focus' : function() { // do some stuff }
  'blur' : function() {
    (function() {
      if (!disableBlurMethod) {
        // do some stuff
      }
    }).delay(50);
  }
});

$('shinyButton').addEvent('click', function() {
  disableBlurMethod = true;
  // do seriously cool stuff
  if (finishedDoingSeriouslyCoolStuff) {
    disableBlurMethod = false;
    $('field').focus();  // return focus to input field
  }
}