2012-10-17 29 views
0

當我啓動一個函數時,我希望它將偵聽器應用到我通過的元素,特別是this jQuery元素。如何將事件監聽器僅附加到新創建的元素?

addEventListeners(this); 

function addEventListeners(el) { 
     $(el).mouseenter(function() { 
      $(this).stop(true,true).switchClass("", "HIGHLIGHT", 400, "easeInOutQuad"); 
     }); 
     $(el).mouseleave(function() { 
      $(this).stop(true,true).switchClass("HIGHLIGHT", "", 400, "easeInOutQuad"); 
     }); 
    } 

它從AJAX結果觸發:

$.post(url,{el:wartosc_inputa},function(returned) { 
     var data = $(returned).hide(); 
     $("#listaElementow").prepend(data); 
     data.slideDown(); 
     loading(); 
     addEventListeners(this); 
    }); 

如何代碼是好?此代碼不會將addEventListeners(this);中的變量傳遞給函數。

+0

你想把事件監聽器附加到什麼地方? – jbabey

回答

0

從您的成功處理程序的其餘的背景下來看,我認爲returned是你嘗試將處理程序綁定到DOM元素。假如是這樣的話:

$.post(url,{el:wartosc_inputa},function(returned) { 
    var data = $(returned).hide(); 
    $("#listaElementow").prepend(data); 
    data.slideDown(); 
    loading(); 
    addEventListeners(data[0]); 
    // change this ^^^^ 
    // pass the DOM element here, or 
    // change the addEventListeners function to take a jquery element 
}); 
0

this在這種情況下是不是你所期望的。試試這個:

var self = this; 
$.post(url,{el:wartosc_inputa},function(returned) { 
    var data = $(returned).hide(); 
    $("#listaElementow").prepend(data); 
    data.slideDown(); 
    loading(); 
    addEventListeners(self); 
}); 
2
在Ajax回調函數

「這」將是Ajax對象,我認爲並不再是一個元素,所以你需要保存在變量「這個」阿賈克斯開始之前。

that = this; 
$.post(url,{el:wartosc_inputa},function(returned) { 
    var data = $(returned).hide(); 
    $("#listaElementow").prepend(data); 
    data.slideDown(); 
    loading(); 
    addEventListeners(that); 
}); 
相關問題