2013-05-02 141 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