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%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%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:
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.
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%Tags und Links javascript jquery forms serialization ckeditor