jQuery clone() 不克隆事件绑定,即使使用 on()

IT技术 javascript jquery
2021-01-29 06:49:12

我创建了一系列用于移动 Web 应用程序的自定义 jQuery 事件。它们工作得很好并且已经过测试。但是,我遇到了一个我无法理解的小问题。

.clone()在 DOM 中的一些元素上使用,其中包含一个按钮。该按钮绑定了一些自定义事件(这些事件使用 绑定.on()),但是。不幸的是,当我使用 jQuery 时.clone(),绑定没有保留,我必须再次添加它们。

以前有没有人遇到过这种情况,有人知道可能的解决方法吗?我认为 using.on()应该保留现在或将来存在的元素的绑定?

2个回答

我认为你应该使用.clone()方法的这个重载

$element.clone(true, true);

克隆( [withDataAndEvents] [, deepWithDataAndEvents] )

withDataAndEvents:一个布尔值,指示事件处理程序和数据是否应与元素一起复制。默认值为假。

deepWithDataAndEvents:一个布尔值,指示是否应复制克隆元素的所有子项的事件处理程序和数据。默认情况下,它的值与第一个参数的值匹配(默认为 false)。


请注意,.on()这实际上并未将事件绑定到目标,而是绑定到您委托给的元素。所以如果你有:

$('#container').on('click', '.button', ...);

这些事件实际上绑定到#container. 当点击一个.button元素时,它会冒泡到#container元素触发事件的元素根据选择器参数进行评估.on(),如果匹配,则执行事件处理程序。这就是事件委托的工作方式。

如果您克隆元素#container,则必须使用.on()要保留的绑定的事件和数据进行深度克隆

如果您.on()#container.

太好了,我不得不做一个 click事件来附加新的克隆 div。ready没有工作
2021-03-13 06:49:12
我问了这个问题,但没有人回答我。你能帮助我吗?
2021-03-25 06:49:12
从来不知道.clone()被接受的论点。FML。谢谢你的帮助。
2021-04-06 06:49:12
@DidierGhys 谢谢,我一直在努力.clone()不克隆.data()data-xxxx="somedata"DOM 中的和数据)。这也修复了它!
2021-04-11 06:49:12

您应该知道深度克隆功能已添加到 1.5 jQuery 版本中。

有关此主题的更多信息:

http://api.jquery.com/clone/