2009-07-24 27 views
13

我申请:为什么我的jQuery点击处理程序似乎为其某些目标运行多次?

$(".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?

+1

尝试apending的 “

”,而不只是 “1” 时解除绑定click事件, – 2009-07-24 14:43:27

+0

哪里#TEST?也许这是代码 – MacAnthony 2009-07-24 14:46:06

回答

20

无法复制。我怀疑你是虚假陈述—过于简单,主要是—你的情况。准确地说,我相信你会动态地添加这些输入,并且每次调用$(".newContentLink").click(...)时,—自然会继续向页面中的每个.newContentLink应用点击处理程序的额外副本。

因此,您创建的最新输入有一个点击处理程序的副本,并附加一个1。第二个最近有两个副本并追加11。第三有三个附加111

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

1

尝试给您的提交输入元素提供不同的名称。

+0

我想要的东西,但它们是由我的脚本在循环中形成的(我只把我希望的代码的相关部分放在那里)。 – Eliyahu 2009-07-24 14:46:01

+1

我只是担心它可能与成功的控制定义有关。 – EFraim 2009-07-24 14:47:19

2

不是一个jQuery错误 - Working Demo

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

编辑:

刚看完chaos' answer,这听起来像一个合理的解释。

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

6

由于chaos says,你可能会调用每次click()你加一个,和他们在积累。

如果您要将这些项目动态添加到文档中,并且需要确保将此功能添加到您添加的每个项目中,那么使用活动如何?

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

这将确保将规则动态应用一次到文档中的任何合格类。

1

我有一个类似的问题....想通了,我在一个循环中应用变化函数......即,我前面的代码是....

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

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

了变化功能出来,宾果游戏...它的工作.....

2

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

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

或可以在每次添加新元素

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

$(".newContentLink").click(function() { 
    $("#test").append("1"); 
}); 
相关问题