2010-09-16 71 views
1

我試圖通過.live()jQuery方法附加一個簡單的焦點/模糊事件監聽器到我的輸入,但我注意到的是focus事件沒有觸發,而blur事件是。Javascript/jQuery:爲什麼焦點事件不會在輸入字段上觸發?

奇怪...希望你可能有一個爲什麼發生這種情況的想法。

下面是代碼:

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…只是把它作爲一個調試的事情,除去它不會使對live監聽工作focus ...

任何幫助,將不勝感激。

謝謝你停下來。

Jannis

回答

3

嘗試修改此行:

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

這一行:

ele.inputs.each(function() { 

說明:

有jQuery的兩種形式的each()

遍歷地圖或數組:

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

}); 

,遍歷一個jQuery對象時:

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

}); 

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

$(this)意味着你只能期望在什麼第二次使用:

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

直播與綁定:

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

...結合someClickEventHandler click事件處理程序,這是執行時存在每a標籤。

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

...結合someClickEventHandler click事件處理程序,這是執行時存在每a標籤,它也將綁定someClickEventHandler click事件處理程序,將以往任何時候都存在的每一個a事件。例如,如果從Ajax響應中創建了a標記,則會自動綁定事件處理程序。

+0

非常感謝你,雖然'.live'仍然不起作用,改變'.live'爲'.bind'然而使它工作。 – Jannis 2010-09-16 00:19:58

+0

'live()'在傳遞它應該作爲目標的選擇器時自動綁定事件處理程序,而不是特定的對象。看我的編輯。 – 2010-09-16 00:26:40

+0

感謝Live vs Bind的加入!非常感激。 – Jannis 2010-09-16 00:52:23

相關問題