Jquery slideToggle在一次调用中执行两次

Jquery slideToggle在一次调用中执行两次,jquery,Jquery,我现在不能展示一个真实的例子,但我看不出slideToggle是如何被调用两次的。点击一个链接就会调用它 在这里: 这意味着在博客页面上显示和隐藏额外的评论。 但是,它会在一次单击中显示然后隐藏。我在“if”和“else”中都添加了一个警报,并且都出现了,那么它是如何调用两次的呢 显然,当链接包含文本“Show”时,它会显示隐藏的div,当再次单击时,它将找不到“Show”,因此会隐藏div。有趣的是,它工作得绝对完美。它在公司内部网上,所以我想可能是其他因素影响了它,但我真的不知道如何影响它。

我现在不能展示一个真实的例子,但我看不出slideToggle是如何被调用两次的。点击一个链接就会调用它

在这里:

这意味着在博客页面上显示和隐藏额外的评论。 但是,它会在一次单击中显示然后隐藏。我在“if”和“else”中都添加了一个警报,并且都出现了,那么它是如何调用两次的呢


显然,当链接包含文本“Show”时,它会显示隐藏的div,当再次单击时,它将找不到“Show”,因此会隐藏div。有趣的是,它工作得绝对完美。它在公司内部网上,所以我想可能是其他因素影响了它,但我真的不知道如何影响它。

当页面重新初始化时,可能会多次调用您的“文档就绪”功能, 最好的做法是在将新的click事件绑定到它之前解除click事件的绑定

这样可以避免在1个元素上绑定两次click事件

试试这个:

$('div.slideToggle a').unbind('click').click(function(){
  // your code here
});
更新:

上述情况的问题是,在第一次绑定click函数后,必须将其再次绑定到添加的每个额外元素

您可以通过在保留在dom中的父项上绑定1 click处理程序来解决此问题。给它一个子选择器作为参数

它只会导致添加1个单击处理程序,而不是为每个元素添加1个。因此,您应该在性能、代码执行时间和所编写的javascript数量上获胜

例如:

假设您有一个列表,在其中您可以友好地添加新元素

<ul id="ContactList">
    <li>John Doe <a href="#">Like</a></li>
    <li>Jane Doe <a href="#">Like</a></li>
    <li>Josh Doe <a href="#">Like</a></li>
    <li>Jeff Doe <a href="#">Like</a></li>
</ul>
现在,无论您以后添加多少项,它都会起作用。 因为它在
ul#ContactList
中的任意位置接受点击,并且只有当点击的元素与选择器
li a
匹配时才会执行回调


$('#ContactList li a')
将首先获取所有元素,然后将单击绑定到所有选定项目。之后新添加的项目没有单击事件,需要先将其绑定到这些项目。

注意移动或包装其中包含脚本块的元素。这会导致那里的代码执行两次。解除绑定是一种解决方法,但最好将js移动到页面的顶部或底部。

我已经很晚了,但是
slideToggle()
函数将为它切换的每个元素调用
complete
函数


可能有不止一个
$(this).parent().sibbines('div.remaining-comments')
仅使用e.stopPropagation();开始时(函数(e){)为我修复了它。

序言

$("#div_one, #div_two").hide("slow", function() {
   $("#div_two").show("slow");
});
您的问题的答案指出了jQuery的一些非常奇怪的地方。当我试图隐藏/滑动div并显示/滑动另一个div(在jQuery/Ajax导航站点中)时,我遇到了这个问题,不知道哪些div已经可见

可能的答案

当jquery在同一调用中调用多个元素时,该函数会执行多次

示例

$("#div_one, #div_two").hide("slow", function() {
   $("#div_two").show("slow");
});
-->#div_two将出现、消失,然后再次出现,因为链接函数将触发两次

附加信息

对具有多个元素的类的调用也会发生同样的情况

解决方案

在我的例子中,我只是决定做不同的事情。第一个div只会消失(没有滑动效果),而新的div可以有滑动效果。这样,我不需要等待第一个div滑动后再触发新div,所以我不必将第二个命令封装到链接函数中

在本例中,警报仅触发一次:

$("#div_one, #div_two").hide();
$("#div_two").show("slow");
});

它改变了用户体验,但仍然有效…

只是想补充一点,我遇到了同样的问题。由于对合并冲突的错误解决,页面中包含了两次.js文件。因此,复选框上的更改事件触发了两次


因此,请检查以确保挂接事件处理程序(或调用
.ready()
)的代码没有被引用两次。

这不是最好的解决方案…处理问题而不是症状,如果运行两次,为什么?没有理由运行所有的
ready
处理程序代码两次,这是非常低效的。另外,如果其他
单击
处理程序绑定到该元素呢?我认为这一定与.ready被多次调用有关e、 我们的页面是大量不同代码片段的合并。因此,可重用函数被放在单独调用中。ready。unbind为我做到了这一点,谢谢。我知道Nick,但我不知道为什么他的ready语句运行了两次,所以我无法暗示可能的修复方向。尽管我应该添加是一种解决方法,而不是修复方法本身。如果我使用$(document).on(方法),该怎么办?
$("#div_one, #div_two").hide();
$("#div_two").show("slow");
});