Javascript Can';在重复调用同一函数时,不要使jQuery回调正常工作

Javascript Can';在重复调用同一函数时,不要使jQuery回调正常工作,javascript,jquery,function,Javascript,Jquery,Function,我在每篇文章旁边都有一个简单的共享按钮,我使用.toggle()函数来显示和隐藏选项。代码如下所示: <div id="posts"> <div class="post"> <div class="content"> Post content </div> <div class="share"> <div class="trigger"> Share </div> <div class="hidde

我在每篇文章旁边都有一个简单的共享按钮,我使用.toggle()函数来显示和隐藏选项。代码如下所示:

<div id="posts">
<div class="post">
<div class="content">
Post content
</div>
<div class="share">
  <div class="trigger"> Share </div>
  <div class="hidden"> Share on Facebook </div>
  <div class="hidden"> Share on Twitter </div>
</div>
</div><!-- each post -->
<div id="new">
</div><!-- new post container -->
</div><!-- Posts -->

<script>    
    function shareThis(){
        $('.trigger').click(function(){
            $(this).siblings().toggle();
        });
    }    
    $(document).ready(function(){
        shareThis();
        $('#new').load("/post2", function(){
            shareThis();
        });
    });
</script>

帖子内容
分享
在Facebook上分享
在Twitter上分享
函数shareThis(){
$('.trigger')。单击(函数(){
$(this.sides().toggle();
});
}    
$(文档).ready(函数(){
分享这个();
$('#new').load(“/post2”,function()){
分享这个();
});
});
我在页面加载时调用此函数一次,然后每次加载新帖子时调用此函数

问题是,它在第一次加载页面时起作用,而在加载新帖子时只对新元素起作用。我也尝试了“每个”函数,但结果相同

所以它只是为最后一个电话工作,类似于我发现的这些问题,和其他一些问题,但没有找到解决我问题的方法

谢谢

问题是,它在第一次加载页面时起作用,而在加载新帖子时只对新元素起作用

您的问题可能是您将事件绑定到现有的
。通过调用
load
回调中的
shareThis
来触发
。因此,基本上,当您单击旧的
.trigger
时,它将触发处理程序两次,即切换两次,使它们保持相同的状态。因此,要么将事件单独绑定到新添加的事件,要么关闭click事件,然后在函数
shareThis
中打开它:

 function shareThis(){
        $('.trigger').off('click').on('click', function(){
            $(this).siblings().toggle();
        });
    }  
您也可以尝试:

function shareThis(ctx){
    ctx = ctx || document;
    $('.trigger', ctx).click(function(){
        $(this).siblings().toggle();
    });
}    
$(document).ready(function(){
    shareThis();
    $('#new').load("/post2", function(){
        shareThis(this);
    });
});

尝试将单击绑定到文档。只需要做一次:)


我理解并同意您的看法,我对其他一些功能也有同样的问题。如果您找到了可能的解决方案,请与我们分享。谢谢。:)@我知道我已经添加了解决方案。顺便问一下,html中的元素
#new
在哪里?你把内容加载了多少次?等等,我试试这个。抱歉,我将编辑该问题,它是div(.post)的同级项,在每个(.post)之后。我必须多次加载它。@我确定您可以使用事件委派以及其他答案,但不要将其绑定到文档,而是将其绑定到DOM中存在的父元素,只要您需要事件。。。但我的观点更倾向于表明你的问题是什么。但是您不需要在这里进行事件委派,因为您正在下一行加载新的html刚刚尝试了您的第一个解决方案,现在一切正常。另一个功能也是,它是一个简单的图像旋转器。仍在学习和测试您编写的所有内容。非常感谢,节日快乐我不能(也不知道如何)使用这个解决方案,因为除了我提到的这个函数之外,我还使用其他函数,所以我需要在文档准备好后调用所有函数。PSL的回答适用于我的情况。谢谢你的帮助。节日快乐!:)当我只需要使用一个函数时,您的解决方案对我也很有效。
$(document).on('click', '.trigger', function () {
    $(this).siblings().toggle();
}).ready(function () {
    $('#new').load("/post2");
});