2010-02-23 61 views
5

阿賈克斯成功後綁定事件因此,這裏是我的代碼:如何在jQuery的

$(document).ready(function() { 
$('#form').bind('change', function(){ 
    $.ajax({ 
    type: 'get', 
    url: 'api.php', 
    data: 'task=getdirs&formname='+$('#form').attr('value'), 
    dataType: "text", 
    success: function (html){ 
     $('#chdir').html(html); 
     $('#chdir select').bind('change', getDirs()); 
     } 
    }); 
}); 
function getDirs(){ 
}}) 

#form這裏有一個<select>元素。 ajax調用會返回一個帶有新的<select>元素的html片段。
它工作的很好:在#chdir div我得到一個新的下拉元素。但success部分內的事件只發射一次。然後這個事件根本不起作用。
如何才能使新創建的<select>元素與第一個元素一樣工作?

回答

10

您直接在bind方法調用上調用getDirs函數,您應該只在該函數返回另一個函數時執行該函數,但我認爲情況並非如此。

變化:

$('#chdir select').bind('change', getDirs()); 

要:

$('#chdir select').bind('change', getDirs); 

或者,如果你正在使用jQuery 1.4以上版本,您可以change事件與live方法綁定只有一次,你將不再需要之後重新綁定事件:

$(document).ready(function() { 
    $('#chdir select').live('change', getDirs); 
}); 
+0

我有一個問題。希望您能夠幫助我。問題是在這裏:http://stackoverflow.com/questions/6276079/ – kamal

+0

小心與現場方法。在jQuery 1.7中被棄用,並在1.9中被刪除(http://api.jquery.com/live/)。 (我知道這是一個非常古老的問題,但我在這裏找到了同樣的問題) – Yises

0

而不是使用綁定,請嘗試使用.live。你需要最新版本的jQuery來做到這一點。

2

如果我的理解正確,問題在於該事件不適用於您的動態創建的select元素。

如果是這樣,解決方法很簡單...試試這個:

$('#form').live('change', function()... 

更新:使用jQuery的新版本,你必須使用on(),而不是live()

+0

這將確保該事件獲取綁定每次。 –

+0

更新提及()是最近jQuery api更改的新方法 –

3

因爲這個SO後在我的谷歌搜索來了,我想我應該指出,.live已被棄用的1.9,現在推薦的方法是.on

http://api.jquery.com/on/

0

從jQuery API:

由於jQuery 1.7的.live()方法已被棄用。使用.on()附加事件處理程序。老版本的jQuery用戶應優先使用.delegate(),而不要使用.live()。

所以你應該使用.delegate(),如果你使用的是1.7以前的jQuery版本。

http://api.jquery.com/live/

1

如果你正在使用jQuery 1.9+,應採用.on方法附加事件處理程序。但是,在將HTML附加到文檔之後,您仍然需要附加新的事件處理程序。

寫的小片的簡單,工作代碼和處理,你可以在文檔中使用.on新的元素:

$(document).on('click', '.close-icon', function() { // selector as a parameter 
    $(this).parent().fadeOut(500); // - example logic code 
});