第二次.html()渲染后没有触发事件

时间:2017-07-21 17:54:12

标签: javascript jquery html backbone.js

我正在尝试使用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(),请参阅下面的答案。

2 个答案:

答案 0 :(得分:1)

您应该考虑使用委托绑定。

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

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

答案 1 :(得分:1)

好的,我找到了解决方案

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”是我正在搞乱的元素的父母。