2013-05-02 184 views
0

我有一個腳本,當它被點擊時,它會運行一個帶有ajax請求的函數。事件只運行一次

jQuery('.go').on('click', function(){ 
    id = ""; 
    id = $(this).parent().parent().find("input").val();    
    request_event("go",id); 
    }); 
jQuery('.noGo').on('click', function(){ 
    id = ""; 
    id = $(this).parent().parent().find("input").val();    
    request_event("noGo",id); 
}); 

運行ajax後,div中的值(即包含span值的div)被更改。

switch(operation){ 
    case "go": 
     jQuery('.eventBox input[value="'+id+'"]').parent().find("#confirmBox").html("<span class='noGo cursorIcon'>N&atilde;o Confirmar</span>"); 

break; 
case "noGo": 
    jQuery('.eventBox input[value="'+id+'"]').parent().find("#confirmBox").html("<span class='go cursorIcon'>Confirmar</span>"); 


break; 
    } 

問題是,在所有新的「鏈接」中,點擊事件沒有被觸發。

任何人都可以在地獄嗎?

回答

1

對於所有的新鏈接上使用.on(),你需要這樣做:

jQuery(document).one('click', '.go', function() { 
    id = ""; 
    id = $(this).parent().parent().find("input").val(); 
    request_event("go", id); 
}); 
+0

這個工作,但你再次點擊,事件運行兩次。 – macieira 2013-05-02 08:49:29

+0

您希望點擊事件只運行一次嗎? – 2013-05-02 08:53:15

+0

是的。每次點擊一次。例如:現在您單擊1次 - 運行1個Ajax請求。第二次點擊 - 使用相同的值運行2 ajax請求。第三次點擊 - 使用相同的值運行3個Ajax請求並繼續... – macieira 2013-05-02 08:54:40

3

最接近的靜態元素或類似這樣的文件爲新創建的元素

jQuery(document).on('click','.go', function(){ 
+1

正確的想法,錯誤的執行 - 您需要在事件類型之後傳遞選擇器以設置事件委派。 – 2013-05-02 08:46:59

+0

@AnthonyGrist謝謝,我忘了補充說 – Anton 2013-05-02 08:50:30

+0

就像我說的Palash Mondal,當我點擊3次,事件3次一次。 – macieira 2013-05-02 08:51:36

0

好像得到「on」事件寄存器的動態元素,其實現需要有點不同,像這樣

$(document).on("click",".go",function(){ 
    alert("hello"); 
    $('#divTest').append("<span class='go'>dynamic span</span>"); 
}); 

在此處查看此信息fiddle