第二次后事件未触发 .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" 是我弄乱的元素的父元素。
我正在尝试使用 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" 是我弄乱的元素的父元素。