Javascript / jQuery: почему событие фокуса не запускается в поле ввода? - PullRequest
1 голос
/ 16 сентября 2010

Я пытаюсь подключить простой слушатель события фокусировки / размытия с помощью метода .live() jQuery к моим входам, но я замечаю, что событие focus не запускается, а событие blur -.

Странно ... надеялся, что у вас есть представление о том, почему это происходит.

Вот код:

function rowHighlight() {
  var form = $('form.register'),
      ele = {};

      form.find('label').each(function(i) {
        var link = this.htmlFor;
        form.find('label[for='+link+'],input[name='+link+'],textarea[name='+link+']').wrapAll('<span class="row"/>');
      });

      ele.row = $('form > .row');
      ele.inputs = ele.row.find('input');


      $.each(ele.inputs, function(i) {
          $(this).focus(function() {
              console.log('hello'); // this will fire.
          });
        $(this).live('focus blur', function(e) {
            console.log('current event type: '+e.type); // the focus on this will not fire!?
            ( e.type=='focus' ? console.log('focussed') : console.log('blurred') )
        });
      });    
}
rowHighlight();

$(this).focus… был просто помещен как отладочная вещь, и удаление его не делает focus на live слушателе работоспособным…

Любая помощь будет оценена.

Спасибо, что заглянули.

Jannis

1 Ответ

3 голосов
/ 16 сентября 2010

Попробуйте изменить эту строку:

$.each(ele.inputs, function(i) {

на эту строку:

ele.inputs.each(function() {

Объяснение:

Существует две формы each() в jQuery.

Итерация по карте или массиву:

$.each([1,2,3], function(index, value){

});

или , при итерации по объекту jQuery:

$("a").each(function(){

});

http://api.jquery.com/jQuery.each/

$(this) означает, что вы ожидаете только при втором использовании:

$("a").each(function(){
    $(this).remove();
});

Live vs. Bind:

$("a").click(someClickEventHandler);

... привязывает обработчик события нажатия someClickEventHandler к каждому тегу a, который существует при его выполнении.

$("a").live("click", someClickEventHandler);

... привязывает обработчик события нажатия someClickEventHandler к каждому *Тег 1040 *, который существует, когда он выполняется, И он также будет привязывать обработчик события клика someClickEventHandler к каждому событию a, которое когда-либо будет существовать.Например, если из ответа Ajax создается тег a, обработчик события будет автоматически связан.

...