Отмена обработчика размытия, основанного на элементе, который был нажат - PullRequest
3 голосов
/ 23 декабря 2010

Привет тебе, замечательные люди!

Моя проблема на этот раз - проверка, произошел ли щелчок мышью с оператором размытия.

У меня есть глобальное решение, где каждое поле ввода проверяется на BLUR. Внутри этого события мне нужно проверить, был ли нажат определенный элемент (т. Е. HelpBubble), если он есть, я не хочу, чтобы проверка происходила, однако, если этот конкретный элемент не был нажат, проверка все еще нуждается случиться.

Любая помощь будет оценена в подавляющем большинстве !!

1 Ответ

6 голосов
/ 23 декабря 2010

Событие blur ранее сфокусированного элемента сработает до события click для вновь сфокусированного элемента. Таким образом, вы не можете предотвратить проверку onblur, основываясь на том, что вы перемещаете, если вы не добавите тайм-аут. Например:

var validationTimer;
$('#myform input').blur(function(){
  var blurred = $(this);
  validationTimer = setTimeout(function(){
    validationTimer = null;
    // Perform Validation on 'blurred'.
  },100);
});

$('.helpbubble').click(function(){
  if (validationTimer){
    clearTimeout(validationTimer);
    validationTimer = null;
  }
});

Это будет ждать 100 мс после размытия перед выполнением проверки, но если щелчок произойдет в течение этого периода времени (это произойдет почти сразу), он будет отменен, прежде чем произойдет.

Редактировать : Вот рабочий пример: http://jsfiddle.net/9SzDP/

...