Lorsque je soumets un formulaire à l'aide de la méthode serialize () de jQuery, tout est soumis, à l'exception de la zone de texte du formulaire. Est-ce un problème commun? Je ne peux pas comprendre. Le formulaire fonctionne à l'exception de la zone de texte qui n'est pas définie ???
<textarea form="new_note_form" id="note_text" name="note_text" required="required"></textarea>
Cela ne fonctionne pas jusqu'à ce que vous ajoutiez l'attribut name
à la zone de texte.
<textarea id="sLifeStyle3Content" name="sLifeStyle3Content" placeholder="HTML is allowed">
<apex:outputText value="{!sLifeStyle3Content}" />
</textarea>
Non ce n'est pas.
Ça fonctionne bien. http://jsfiddle.net/nuBkM/
<form>
<input name="foo" value="bar"/><br>
<textarea name="something">lorem ipsum</textarea>
</form>
Le javascript
console.log($("form").serialize());
// => foo=bar&something=lorem+ipsum
.serializeArray
fonctionne aussi
console.log($("form").serializeArray());
// => [{name: "foo", value: "bar"}, {name: "something", value: "lorem ipsum"}]
Une autre solution consiste à transformer la valeur textarea en une variable et à la transmettre à l’appel ajax ...
var comment = $ ('. note_comment'). val ();
$.ajax({
type: "POST",
url: '/approot/rewrite.cfm/app.people/insertNote?format=json&Comment=' + comment,
data: $("form[name='add_note_form']").serializeArray(),
success: function(data)
{
alert('success');
}
});
Fonctionne bien dans le violon. http://jsfiddle.net/Ultimate/2Ey2A/ Test avec
$('button').click(function(){
alert($('form').serialize());
});
C'est ce que j'utilise pour inclure/exclure chacun des éléments car j'en ai besoin du formulaire. Cette méthode rend également nos formulaires plus anciens sérialisables, même si certains éléments ne portent que des identifiants, et non des noms.
$( 'textarea' ).each( function() {
$(this).attr( 'type', 'textarea' );
});
$( 'input:text:not( ".excluded" ), input:checkbox, input:radio, textarea' ).each( function() {
if (!$(this).hasClass( 'answer' )) {
$(this).addClass( 'answer' );
}
if ( !$(this).attr( "name" ) && $(this).attr( 'id' ) ) {
$(this).attr( "name", $(this).attr("id") );
}
});
J'appelle ensuite la fonction ci-dessous pour obtenir mon tableau sérialisé sur l'événement $( '.answer' ).change()
, sur la navigation de page et sur l'événement $('form').submit()
. Cette méthode ne met aucune charge notable sur les performances de la page que je peux discerner.
function storeFormData() {
var serializedData = $( ".answer" ).serializeArray();
var formDataObj = serializedData;
var formDataString = JSON.stringify(formDataObj);
localStorage.setItem(fso_id, formDataString);
return formDataString;
}
J'ai la même expérience. Soumettre un formulaire en utilisant $ ("# form_id"). Serialize () n'inclut pas les champs textarea. Ce comportement est consistant depuis 2 ans sous la seule forme comportant des éléments textarea. De temps en temps, je réexamine la forme et le code pour conclure que cela devrait fonctionner, mais ne fonctionne pas.
Mon travail consiste, bien entendu, à déplacer d’abord le contenu des zones de texte dans des zones de texte masquées, puis à sérialiser les données du formulaire.
Il ne contient pas textarea , sauf si vous supprimez 'form = "new_note_form"' de votre élément textarea.
Je sais que cela va à l’encontre des bonnes pratiques, mais si vous souhaitez utiliser la fonction serialize de jQuery, vous devez supprimer cet attribut de l’élément textarea.
Si la zone de texte est contrôlée par un éditeur tel que tinyMCE, vous devrez peut-être appeler tinyMCE.triggerSave()
, comme décrit dans cette réponse .