2017-07-21 80 views
0

我想呈現不同的頁面元素(分頁)與jQuery的轉換,當我呈現第一頁時,它的一切正常,但是當轉換髮生時,所有我附加到我的元素的事件消失了,我不知道爲什麼,.html()似乎在第二次渲染中刪除它們,不知道我怎麼能通過它們,認爲.clone(true,true)就夠了,但沒有。事件不會在第二次後觸發.html()渲染它們

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(),請參閱下面的答案。

+1

我們需要一個[mcve]來真正指出問題。 –

+0

@Diego關於你的編輯。你聲稱你「不完全確定如何應用這個問題解決方案[原文如此]」。但是,您的[自我回答](https://stackoverflow.com/a/45245869/1906307)是使用'.detach()'。 [和那個答案](https://stackoverflow.com/a/12046271/1906307)是使用'.detach()'。 – Louis

+0

@Louis是的,當我張貼編輯我的聲明是真實的一段時間後,測試我找到了正確的方法來解決方案,要再次更新我的文章。 – Diego

回答

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」是我搞亂的元素的父母。

1

你應該考慮使用委託綁定。

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

這個問題很有可能是你用html()替換了你綁定的內容,所以綁定的元素不見了。通過在父母上使用一個永遠不會被移除的委託綁定,來自子節點的事件將向其發送,並按照預期進行處理。

相關問題