CKEditor und jQuery serialize () Problem

8

Ich habe Probleme mit der Funktion jQuery serialize ().

Im Kontext öffne ich ein Formular und überprüfe die vorgenommenen Änderungen. Wenn das Formular geladen wird, sortiere ich die Daten und ordne sie einer globalen Variablen zu:

%Vor%

Das funktioniert gut.

Wenn ich dann auf eine Schaltfläche klicke, um das Formular zu verlassen, führt es folgende Überprüfung aus:

%Vor%

Jedenfalls. Beide serialize () - Funktionen funktionieren, aber der zweite hat Apostrophe usw. in eine Reihe von Zahlen und Prozentzeichen umgewandelt (was ich sicher annehmen kann, ist ein Code für Apostroph).

Irgendwelche Ideen warum? Das heißt, auch wenn keine Änderungen vorgenommen werden, öffnet sich der Dialog und stöhnt, dass das Formular ohne Speichern geändert wurde.

Hilfe!

Hier einige Beispieldaten.

Ich verwende eine CKEditor-Instanz.

Teil des ersten Ergebnisses:

%Vor%

und der zweite:

%Vor%     
Alex 19.04.2011, 12:53
quelle

4 Antworten

13

Wie in den Kommentaren zu Ihrem ursprünglichen Beitrag erwähnt, gehe ich davon aus, dass Sie CKEditor verwenden und in Ihrer jQuery-ready-Funktion (oder irgendwo nach dem Laden Ihres Dokuments) ein Textfeld durch eine Editorinstanz ersetzen. CKEditor, wie die meisten WYSIWYG-Editoren, formatiert gerne den Text, den Sie ihm übergeben, macht ihn zu einem gültigen Markup, ersetzt Sonderzeichen durch HTML-Entitäten, umschließt Ihren Inhalt in einem Absatz usw. Das bedeutet, dass Sie nichts verändert haben, das Original und der umformatierte Inhalt kann anders sein.

Die Initialisierung der Editorinstanz verzögert sich und tritt wahrscheinlich auf, nachdem Sie Ihr Formular serialisiert haben. Trotzdem ist CKEditor nicht stark mit der (jetzt ausgeblendeten) Textfläche verbunden, aus der er erstellt wurde. Sie müssen die Funktion updateElement des Editors aufrufen, um alle Änderungen zu löschen. In der Regel wird dies automatisch beim Senden von Formularen durchgeführt. Deshalb erhalten Sie den umformatierten Inhalt in Ihrem Übermittlungs-Handler.

Sie müssen also nur sicherstellen, dass Sie die updateElement-Funktion aufrufen, bevor Sie das erste Mal serialisieren, für das die beste Stelle nach dem Laden des Editors ist. Glücklicherweise gibt es dafür ein Ereignis, das folgende HTML-Markup vorausgesetzt:

%Vor%

jQuery ready-Funktion:

%Vor%     
DarthJDG 19.04.2011, 14:11
quelle
3

Danke! Ich hatte schon lange Probleme mit CKEditor textarea. Ich konnte den Wert nicht ändern, ohne in CakePHP einreichen zu müssen.

Aber jetzt funktioniert alles. Ich musste updateElement vor serialize wie folgt aufrufen:

%Vor%     
Miika Kontio 20.05.2014 11:38
quelle
1

Die Werte sind URI-codiert, weil ".serialize ()" verwendet werden soll, wenn HTTP-Parameter für die Übertragung vorbereitet werden.

Sie können die Werte aller Formularelemente zu einer großen Zeichenfolge zusammenfassen, indem Sie einfach alle <input> -Elemente (und ggf. <select> und <textarea> ) durchlaufen. Optionsfelder werden ein wenig schwierig, aber es ist immer noch eine ziemlich kleine Anstrengung.

    
Pointy 19.04.2011 12:58
quelle
0

Von den jQuery-Dokumenten :

  

Die Methode .serialize () erstellt einen Text   Zeichenfolge in Standard-URL-codiert   Notation.

Deshalb haben Sie diese Prozentsätze und Zahlen. Obwohl es den gleichen Wert zurückgeben sollte, egal wie oft Sie es anrufen, so bin ich mir sicher, dass Sie zwischen den beiden Anrufen etwas für Ihr Formular tun.

Sie könnten einen anderen Ansatz wie

verwenden %Vor%

jQuery: Eingabeauswahl

    
kapa 19.04.2011 12:59
quelle