mootools禁用或拦截添加的事件

时间:2012-01-05 04:43:33

标签: events mootools intercept

让我说我这样做:

$('field').addEvents ({
  'focus' : function() { // do some stuff }
  'blur' : function() { // do other stuff }
});

这是我所有文本输入字段的默认行为。我现在想做的就是这样的事情

<button id='shinyButton' name='shinyButton'>Poke Me</button>

然后:

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

这样:

1)我如何stopDefaultBlurFunctionInCurrentlyFocussedField();?

2)我怎么知道我是否真的完成了DoingSeriouslyCoolStuff?

1 个答案:

答案 0 :(得分:0)

严格地说,由于blur事件在您的点击处理程序之前触发,您无法执行您想要执行的操作。

Dimitar建议在鼠标悬停时禁用该事件对鼠标用户有效,但可以防止用户使用键盘触发按钮。

一个选项(但有点破解)是在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
  }
}