2013-02-08 47 views
4

我试图在一些证书tr后附加tr,我使用此代码。但它是通过加倍追加,第一次只有1,第二次2和第三次6 ......有人可以帮我解决这个问题吗?我只想每次点击只添加一个trinsertAfter()通过加倍追加

function einfugen(){ 
    $('#append_tr').bind('click', function(){ 
    $('<tr><td>new td</td></tr>').insertAfter('#append_tr'); 
    }); 
} 



<tr id="append_tr"> some data </td> 

编辑:这里是我的绑定代码:

<tr id="append_tr"><td> <a onclick="einfugen()"> + add </a> </td></tr> 

感谢您的帮助

回答

2

einfugen()函数声明单击处理程序,并将其从单击事件在这里呼吁:

<tr id="append_tr"><td> <a onclick="einfugen()"> + add </a> </td></tr> 

你越点击它,附加更多的点击处理程序。你可以做的反而是去除einfugen()函数声明,但内容移动到DOM准备函数:

$(function() { 
    $('#append_tr').on('click', function(){ 
    $('<tr><td>new td</td></tr>').insertAfter('#append_tr'); 
    }); 
}); 

具有单击处理那里注册省去了内联onclick处理程序代码。

+0

不完全是,您的“第一个”只在“onclick”调用的函数内。如果后者被删除,* no *处理程序将被添加。 – 2013-02-08 13:37:37

+0

@DavidHedlund,是的,你是对的,它现在不工作 – doniyor 2013-02-08 13:38:27

+0

@杰克,谢谢,你点了。我将函数调用改为''(function(){})''现在像一个魅力:D – doniyor 2013-02-08 13:41:07

2

这听起来像你打电话超过一次einfugen更多。如果您只调用一次,它将起作用(Demo)。

编辑:从你的更新,是的,你每次点击“添加”链接时都绑定一个监听器。你很困惑发起了一个动作,这将在onclick合理,绑定听众在给定事件发射。

einfugen运行时,您的insertAfter未运行。 einfugen只是添加一个侦听器,指示该代码在发生点击时运行。所以这个调用可以一次完成,最初,然后你的听众将永远在那里。它不应该在每次点击时添加。

你可以监听绑定最初像这样:

$(function() { 
    $('#append_tr').bind('click', function(){ 
    $('<tr><td>new td</td></tr>').insertAfter('#append_tr'); 
    }); 
}); 

哪里$(function() { ... });是在DOMReady运行功能的简写,即只要所有的DOM节点都保证是由脚本访问。

Demo

+0

同意。你可以发布你的点击绑定代码吗? – Miquel 2013-02-08 13:31:10

+0

是的,我会更新并添加绑定部分 – doniyor 2013-02-08 13:31:34

+0

我更新了我的问题,但我似乎不止一次调用该函数,对吗? – doniyor 2013-02-08 13:35:13

3

您可能会多次调用该函数。

不要使用bind和使用on(jQuery的1.7):

$('#append_tr').on('click', function(){ 
    $('<tr><td>new td</td></tr>').insertAfter('#append_tr'); 
}); 

http://api.jquery.com/bind/

从您的编辑:

<a onclick="einfugen()"> 

就是问题所在。每次链接被点击时,您正在重新绑定事件处理程序。

使用下面的结构,你可以这样做:

$("#append_tr").click(function() { 
    $("#table").append("<tr><td>New row!</td></tr>"); 
}); 

http://jsfiddle.net/mBNbZ/

+0

同意,'on'是绑定的首选方法,但这并不能解决这个问题。 – 2013-02-08 13:32:44

+0

@DavidHedlund - 我同意它可能无法解决问题,因为我相信OP正在多次调用einfugen函数。然而,在推荐最佳实践方面没有坏处。 – 2013-02-08 13:34:10

+0

我不是多次调用函数,请参阅我的更新。 – doniyor 2013-02-08 13:34:49