如何使用Jquery删除附加元素以及为什么绑定或生存会导致元素重复

现在我知道这个基本问题之前已被问过,但我一定是做错了。 我知道在我可以对它做任何事情之前必须绑定一个附加元素。 但是,尝试我可能无法让它工作。

当人们点击收音机选择时,我正在显示一条消息并显示。 当我尝试绑定新元素时,它会以奇怪的方式堆叠。 它将开始堆叠元素。 例如 – [单击1]消息1,[单击2]消息1和2,依此类推。

我已经尝试了一大堆不同的方法来绑定它。 我希望删除会删除#feedback,然后创建并绑定下一条消息。 我必须做一些非常错误的事情。 我知道这与其他post非常相似,但我经历了所有这些post并且无法找到足够明确的答案来帮助。 先感谢您。

HTML

JavaScript的:

 function feedback(message) { $('#answer').live('click', function() { $('#feedback').remove(); }); $('#answer').live('click', function() { $('.answers').append('
'+message+'
'); }); };

如果我正确地理解了你的问题,我已经做了一个小提琴 , 让它正常工作。 这个问题与你如何分配事件处理程序有关,并且正如其他人所说的那样,你已经过了事件处理程序。 当前的jQuery最佳实践是使用on()来注册事件处理程序。 这是关于on : link的jQuery文档的链接

您的原始解决方案非常接近,但您添加事件处理程序的方式有点令人困惑。 不向HTML元素添加事件是最佳实践。 我建议阅读Unobstrusive JavaScript。

这是JavaScript代码。 我添加了一个计数器变量,以便您可以看到它正常工作。

 $('#answer').on('click', function() { feedback('hey there'); }); var counter = 0; function feedback(message) { $('#feedback').remove(); $('.answers').append('
' + message + ' ' + counter + '
'); counter++; }

live函数正在注册click事件处理程序。 每次单击对象时都会这样做。 因此,如果单击两次,则会为对象分配两个单击处理程序。 您还在此处指定了一个点击处理程序:

 onclick="feedback('the message html')"; 

然后单击处理程序通过live()分配另一个单击处理程序。

真的我认为你想做的是这样的:

 function feedback(message) { $('#feedback').remove(); $('.answers').append('
'+message+'
'); }

好的,根据你的评论,尝试取出元素的onclick部分,而不是把它放在document.ready()处理程序中。

 $('#answer').live('click',function(){ $('#feedback').remove(); $('.answers').append('
'+message+'
'); });

你在页面上有多个单选按钮吗?

因为我看到的是,当您单击单选按钮时,您将事件分配给页面上的所有单选按钮

我会做的事情如下:

 $(documento).on('click', '#answer', function() { feedback('hey there'); });