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

Events not firing after second time .html() renders them

我正在尝试使用 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:似乎这些人遇到了几乎相同的问题,但我不完全确定如何将该问题的解决方案应用到我的案例中。 Backbone: event lost in re-render

更新 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" 是我弄乱的元素的父元素。