为什么我的jQuery单击处理出现某些其目标多次运行?(Why does my jQuery cli

2019-06-26 17:11发布

我申请:

$(".newContentLink").click(function() {
    $("#test").append("1");
});

在此:

<span id="contents">
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/>
<span id="content1" class="content study">
</span>
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/>
<span id="content3" class="content study">
</span>
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/>
<span id="content4" class="content category">
</span>
<input class="newContentLink" type="submit" style="width: 100%;" value="CREATE A NEW CONTENT"/>
</span>

为什么当我点击第2个按钮将其添加111,下按钮增加了11,最后一个加1?

Answer 1:

无法复制。 我怀疑你是歪曲 - 简单化,主要是 - 你的情况。 准确地说,我相信你动态添加的输入,并调用$(".newContentLink").click(...)每一次-这,自然,不断应用单击处理的其他副本的每个.newContentLink在这页纸。

所以,你创建的最新输入具有单击处理程序的一个副本,并附加一个1 。 第二最近有两个副本,并附加11 。 第三有三个,并追加111等。

为了防止这种情况,应用单击处理程序到新创建的DOM元素,而不是$(".newContentLink")这总是意味着 .newContentLink )。



Answer 2:

或者您也可以在每次解除绑定click事件添加了新的元素

$('.newContentLink').unbind('click');

$(".newContentLink").click(function() {
    $("#test").append("1");
});


Answer 3:

作为乱说 ,你可能会调用click()每次添加一个时间,他们正在积累。

如果你动态地添加这些项目的文件,并需要确保此功能被添加到您添加的每一个,关于使用生活怎么样?

$('#contents').on('click', '.newContentLink', function() {
    $("#test").append("1");
});

这将确保该规则动态应用一次以任何限定类在文档中。



Answer 4:

为了确保功能只在点击事件,你可以使用$执行一次一个()(“newContentLink。”)。

$(".newContentLink").one(function() {
    $("#test").append("1");
});


Answer 5:

没有一个jQuery错误- 工作演示

必须有与其他人在你的代码的东西有问题。 凡与元素id="test"在您的标记?

编辑:

刚看完乱的回答 ,这听起来像一个合理的解释。

顺便说一句,元素ID必须HTML标记内是唯一的 - 这是HTML规范的一部分,可能是另一个可能的解释



Answer 6:

尝试你的提交输入元素给予不同的名称。



Answer 7:

我有一个类似的问题....想通了,我申请的变化功能在一个循环...即我先前的代码是....

$("table#UserIRTable > tbody > tr").each(function()
{
   ..............
   ..............

  $("input[id='thisMonthSupply']").change(function(e){  
      ......
    });
  ..........
  ..........
}

拿着更改功能出来,宾果游戏...它的工作.....



文章来源: Why does my jQuery click handler appear to run multiple times for some of its targets?