我正在尝试使用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(),请参阅下面的答案。
答案 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”是我正在搞乱的元素的父母。