Javascript 如何在AJAX返回的HTML中调用jQuery函数
我有一个页面,我有帖子,用户可以发表评论。注释是使用AJAX处理的。每个评论行都有一个投票按钮 在索引页面中,我将jQuery函数用于投票Javascript 如何在AJAX返回的HTML中调用jQuery函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个页面,我有帖子,用户可以发表评论。注释是使用AJAX处理的。每个评论行都有一个投票按钮 在索引页面中,我将jQuery函数用于投票 <script type="text/javascript"> $(function() { $('.voteUpBtn').click(function() { // Cast your vote } } </script> 在附加的HTML上,我
<script type="text/javascript">
$(function() {
$('.voteUpBtn').click(function() {
// Cast your vote
}
}
</script>
在附加的HTML上,我有相同的投票按钮。每个评论都有一个相应的投票按钮
问题是,AJAX生成的新评论上的投票按钮不起作用。如果我刷新了页面,尽管我使用了相同的标记,但投票仍然有效
如何使投票按钮在AJAX返回的HTML中工作?使用jquery.live绑定
使用jquery.live绑定 您可以使用live方法将事件附加到所有匹配的元素,即使这些元素当时尚未创建:
$('.voteUpBtn').live('click', function(){ ... });
这样,当加载ajax内容时,单击事件将自动应用于新的.voteUpBtn。您可以使用live方法将事件附加到所有匹配元素,即使这些元素当时尚未创建:
$('.voteUpBtn').live('click', function(){ ... });
这样,当加载ajax内容时,单击事件将自动应用于新的.voteUpBtn。您可以使用live将与当前选择器匹配的所有元素的处理程序附加到事件,现在和将来:
现在和将来,您可以使用live将与当前选择器匹配的所有元素的处理程序附加到事件:
使用live而不是单击:
使用live而不是单击:
您应该使用方法,而不是“单击”将事件绑定到按钮
$'.voteUpBtn'.live“单击”功能{
//投你的票
}您应该使用方法,而不是“单击”将事件绑定到按钮
$'.voteUpBtn'.live“单击”功能{
//投你的票
}例如,当使用AJAX请求将新HTML代码引入页面时,先前设置的事件不会自动分配给新引入的DOM元素。因此,您的.voteUpBtn元素的单击事件尚未出现,即使您的新DOM元素的class属性可能设置为voteUpBtn。必须将此事件再次添加到AJAX请求的success函数中新引入的DOM元素中 或者。。。您可以使用live函数将处理程序附加到与当前选择器匹配的所有元素的事件,无论是现在还是将来。
或者。。。您可以使用委托函数,它实际上更像是live的替代品。它可以完成live所能做的几乎所有事情,但效率会更高。例如,当您使用AJAX请求将新HTML代码引入页面时,以前设置的事件不会自动分配给新引入的DOM元素。因此,您的.voteUpBtn元素的单击事件尚未出现,即使您的新DOM元素的class属性可能设置为voteUpBtn。必须将此事件再次添加到AJAX请求的success函数中新引入的DOM元素中 或者。。。您可以使用live函数将处理程序附加到与当前选择器匹配的所有元素的事件,无论是现在还是将来。 或者。。。您可以使用委托函数,它实际上更像是live的替代品。它可以做live所能做的几乎所有事情,但它可以更高效一些。如果可以使用jQuery>1.4,请使用而不是live 动态添加的元素不会在原始绑定上没有live或delegate的情况下拾取jQuery绑定。如果可以按原样使用jQuery>1.4,请使用而不是live 动态添加的元素不会在原始绑定上没有live或delegate的情况下拾取jQuery绑定。更新 这是一个古老的答案。从jQuery1.7开始,使用可以获得相同的结果。下面是原始答案片段的等价物:
$('#ul.nextlines').on('click', '.voteUpBtn', function (e) {
// your voting logic here
});
原始答案
我建议你用过。活的。两者都可以工作,但在包含对象上有一个事件处理程序更为简洁
$('#ul.nextlines').delegate( '.voteUpBtn', 'click', function(){
// your voting logic here
});
除非指定上下文,.live实际上会将处理程序绑定到整个DOM的根,因此会监视整个文档中的事件。此外,使用.live时,选择器会立即运行,即使预期效果是在将来。因此.live的性能不如.delegate,因为它的作用域受到约束,在这种情况下,它的选择器.voteUpBtn不会立即运行。在某些情况下,这些性能差异可能是明显的,比如有许多行的表,或者有许多项的列表
更新
这是一个古老的答案。从jQuery1.7开始,使用可以获得相同的结果。下面是原始答案片段的等价物:
$('#ul.nextlines').on('click', '.voteUpBtn', function (e) {
// your voting logic here
});
原始答案
我建议你用过。活的。两者都可以工作,但在包含对象上有一个事件处理程序更为简洁
$('#ul.nextlines').delegate( '.voteUpBtn', 'click', function(){
// your voting logic here
});
除非指定上下文,.live实际上将处理程序绑定到ro
查看整个DOM的事件,从而监视整个文档中的事件。此外,使用.live时,选择器会立即运行,即使预期效果是在将来。因此.live的性能不如.delegate,因为它的作用域受到约束,在这种情况下,它的选择器.voteUpBtn不会立即运行。在某些情况下,这些性能差异可能是明显的,比如有许多行的表,或者有许多项的列表
如果我没有活动怎么办。。或者更确切地说,事件处于页面加载状态。我有点像$'newline'.elastic;,现在,我希望它也适用于未来的所有选择器。如何更改语法?如果没有事件怎么办。。或者更确切地说,事件处于页面加载状态。我有点像$'newline'.elastic;,现在,我希望它也适用于未来的所有选择器。如何更改语法??关于委托的有趣点。我同意。。。应该更有效率。我必须开始使用这个函数。谢谢关于代理的有趣的一点。我同意。。。应该更有效率。我必须开始使用这个函数。谢谢