JQuery:on('Click')没有响应新添加的按钮

时间:2014-12-09 15:57:00

标签: javascript jquery ajax json django

我有一个有效的Django应用程序,当用户提交新评论时,我使用JQuery将AJAX发送到服务器端。具体来说,当用户提交新注释时,它会触发以下JQuery函数:

$(":input[type='submit']").on('click',function(event){
     // send AJAX to Django views.py
     }

当JSON数据从views.py返回时,它会将包含新注释文本的HTML块添加到当前页面而不刷新页面。问题是这个新的HTML块还包含input[type='submit']个元素。但是当我单击这些元素时,它们没有响应,views.py中的json.dumps无法检测到它们。显然,单击该按钮时,上述JQuery函数不会触发。

我检查了"查看来源"在Chrome中。这些HTML确实出现在源代码中。它只是没有响应,HTTPResponse只会返回一个JSON dict纯文本,这是jQuery函数不会触发的标志。

感谢有人能帮我一把..谢谢!

1 个答案:

答案 0 :(得分:0)

.on事件仅用于声明时存在的元素。

来自jQuery文档 - http://api.jquery.com/on/

  

事件处理程序仅绑定到当前选定的元素;他们   在您的代码调用.on()时,页面上必须存在。   要确保元素存在且可以选择,请执行事件   绑定在文档就绪处理程序中的元素   页面上的HTML标记。如果将新HTML注入页面,   选择元素并在新HTML之后附加事件处理程序   放入页面。或者,使用委派事件来附加事件   处理程序,如下所述。

     

委派事件的优势在于它们可以处理来自的事件   稍后添加到文档中的后代元素。通过   选择一个保证在当时存在的元素   委托事件处理程序附加,您可以使用委托事件   避免频繁附加和删除事件处理程序。

因此,要使用委托事件,您要将on事件附加到父元素,例如如果要将新注释附加到元素#container

$("#container").on('click','input[type=submit]',function(event){
   // send AJAX to Django views.py
});

示例 - http://jsfiddle.net/eg0yx920/

相关问题