jQuery erreur de sérialisation avec un champ de zone de texte
-
29-09-2019 - |
Question
J'utilise cette fonction, pour soumettre le formulaire en arrière-plan, avec des messages personnalisés. Il fonctionne parfaitement, à l'exception des champs textarea. J'ai lu que la fonction serialize a des problèmes avec son ex. linebreaks.
$(function() {
$("#comment_form").validate({ submitHandler: function(form) {
$.post('/u/r/l/', $("#comment_form").serialize(),
function(data) {
$('#comment_container').html(data);
});
}
});
Le textarea est un markItUp! zone de l'éditeur.
La solution
Comme indiqué ici: http://api.jquery.com/serialize/#comment- 67394779
function keepLB (str) {
var reg=new RegExp("(%0A)", "g");
return str.replace(reg,"%0D$1");
}
$(function() {
$("#comment_form").validate({ submitHandler: function(form) {
$.post('/u/r/l/', keepLB($("#comment_form").formSerialize()), function(data) {
$('#comment_container').html(data);
});
}
});
Si cela ne fonctionne pas, urlencode manuellement les données textarea:
$(function() {
$("#comment_form").validate({ submitHandler: function(form) {
$.post('/u/r/l/', "textareadata="+escape($("#mytextarea").value), function(data) {
$('#comment_container').html(data);
});
}
});
Et si vous souhaitez envoyer d'autres contenu du formulaire (note: ne donne pas le textarea un « nom » ici, juste une carte d'identité!):
$(function() {
$("#comment_form").validate({ submitHandler: function(form) {
$.post('/u/r/l/',
$("#comment_form").formSerialize()+"&textareadata="+escape($("#mytextarea").value),
function(data) {
$('#comment_container').html(data);
});
}
});
Autres conseils
Une pensée (si utilisation standard de jQuery serialize ne fonctionne pas) est que le code markItUp prend que textarea et faire quelque chose de fantaisie avec lui pour qu'il n'agit même pas comme un textarea plus. Est-il possible dans l'API markItUp pour récupérer les données peut-être?
Voici main_post_txt l'id de l'élément de zone de texte HTML que vous utilisez et jquery vous pouvez obtenir facilement sa valeur en utilisant
var post_text = $("#main_post_txt").serialize();