1

假设我这样做:

$('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) 我如何停止DefaultBlurFunctionInCurrentlyFocusedField();?

2)我如何判断我是否真的完成了DoingSeriouslyCoolStuff?

4

1 回答 1

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
  }
}
于 2012-02-22T15:21:40.473 回答