Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在AJAX返回的HTML中调用jQuery函数_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何在AJAX返回的HTML中调用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上,我

我有一个页面,我有帖子,用户可以发表评论。注释是使用AJAX处理的。每个评论行都有一个投票按钮

在索引页面中,我将jQuery函数用于投票

<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;,现在,我希望它也适用于未来的所有选择器。如何更改语法??关于委托的有趣点。我同意。。。应该更有效率。我必须开始使用这个函数。谢谢关于代理的有趣的一点。我同意。。。应该更有效率。我必须开始使用这个函数。谢谢