2017-07-21 1 views
0

Ich versuche, verschiedene Seiten von Elementen (Seitennummerierung) mit Übergängen mit jquery zu rendern, wenn ich die erste Seite rendern alles in Ordnung, aber wenn der Übergang alle auftritt Ereignisse, die ich an meine Elemente angehängt habe verschwinden und ich weiß nicht genau warum, .html() scheint sie auf dem zweiten Render zu löschen, nicht sicher, wie ich sie weitergeben kann, dachte .clone(true,true) war genug, aber nein.Ereignisse nicht nach dem zweiten Mal .html() rendert sie

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(); 
    }; 

Jede Hilfe oder Korrektur wird geschätzt.

Update 1: Scheint, diese Jungs hatten fast das gleiche Problem, aber ich bin nicht ganz sicher, wie diese Frage Lösungen auf meinen Fall anwenden. Backbone: event lost in re-render

Update 2: Finden Sie heraus, wie Sie die Lösung .detach() anwenden, siehe meine Antwort unten.

+1

Wir werden ein [mcve] brauchen, um das Problem (die Probleme) genau zu lokalisieren. –

+0

@Diego In Bezug auf Ihre Bearbeitung. Sie behaupten, Sie seien "nicht ganz sicher, wie diese Frage gelöst werden soll" (sic). Ihre [Selbst-Antwort hier] (https://stackoverflow.com/a/45245869/1906307) soll '.detach()' verwenden. [Und diese Antwort dort] (https://stackoverflow.com/a/12046271/1906307) ist '.detach()' zu verwenden. – Louis

+0

@Louis Ja, als ich die Bearbeitung veröffentlicht habe, war mein Anspruch nach einiger Zeit wahr und ich habe den Weg gefunden, die Lösung richtig zu implementieren, werde meinen Beitrag erneut aktualisieren. – Diego

Antwort

1

Ok ich die Lösung gefunden

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(); 
    }; 

einfach hatte die Elemente mit .detach() zu entfernen, die die Bindungen brechen tut und fügen Sie sie wieder nach, dass aus irgendeinem Grund die Ereignisbindung nicht auf diese Weise zerstört wird .

"NombreINPUT" ist das übergeordnete Element der Elemente, mit denen ich zu tun hatte.

1

Sie sollten Delegat-Bindungen verwenden.

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

Das Problem ist sehr wahrscheinlich, dass Sie die Inhalte ersetzen, die Sie mit html gebunden an haben(), so dass die Elemente, die die Bindungen hatten verschwunden sind. Durch die Verwendung einer Delegate-Bindung für ein übergeordnetes Element, das nie entfernt wird, werden die Ereignisse von den untergeordneten Elementen zu ihm übergehen und werden wie erwartet verarbeitet.

Verwandte Themen