第二次 .html() 后未触发的事件会呈现它们



我正在尝试使用 jquery 渲染带有过渡的不同元素页面(分页(,当我渲染第一页时一切都很好,但是当过渡发生时,我附加到元素的所有事件都消失了,我不知道确切的原因,.html()似乎在第二次渲染中删除了它们,不确定如何传递它们, 以为.clone(true,true)就够了,但没有。

var transition_default = function(offsetStart, offsetEnd) {
plugin.currentElements.hide();
plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(true,true);
plugin.el.html(plugin.currentElements);
plugin.currentElements.show();
};

任何帮助或更正将不胜感激。

更新1:似乎这家伙遇到了几乎相同的问题,但我不完全确定如何将该问题解决方案应用于我的情况。 主干:重新渲染时丢失的事件

更新2:了解如何应用解决方案.detach((,请参阅下面的答案。

应考虑使用委托绑定。

$(existingParentElementOfThings).on(event, childElementSelector, eventHandler);

问题很可能是您要用 html(( 替换绑定的内容,因此具有绑定的元素消失了。 通过在永不删除的父级上使用委托绑定,来自子级的事件将冒泡到它,并将按预期处理。

好的,我找到了解决方案

var transition_default = function(offsetStart, offsetEnd) {
plugin.currentElements.hide();
plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(true,true);
$("#nombreINPUT").children().detach();
$("#nombreINPUT").html(plugin.currentElements);
plugin.currentElements.show();
};

只需使用 .detach(( 删除不会破坏绑定的元素,然后再次添加它们,由于某种原因,事件绑定不会以这种方式销毁。

"NombreINPUT"是我弄乱的元素的父级。

最新更新