我有一个有效的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函数不会触发的标志。
感谢有人能帮我一把..谢谢!
答案 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
});