mootools отключить или перехватить добавленное событие - PullRequest
1 голос
/ 05 января 2012

допустим, я делаю это:

$('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) как мне остановитьDefaultBlurFunctionInCurrentlyFocussedField();?

2) как мне узнать, действительно ли я закончил DoingSeriouslyCoolStuff?

1 Ответ

0 голосов
/ 22 февраля 2012

Строго говоря, вы не можете делать то, что хотите, потому что событие blur срабатывает раньше, чем ваш обработчик кликов.

Предложение Димитара об отключении события при наведении курсора отлично работает для пользователей мыши, но не позволяет пользователям запускать кнопку с помощью клавиатуры.

Один из вариантов (но немного хакерский) - ввести небольшую задержку в обработчик событий 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
  }
}
...