web-dev-qa-db-fra.com

jQuery serialize () laisse de côté textarea

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>     
19
Amoeba

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>

21
Daniel Sokolowski

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"}] 
5
user633183

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');         
               }
             });
1
dtharpe

Fonctionne bien dans le violon. http://jsfiddle.net/Ultimate/2Ey2A/ Test avec 

$('button').click(function(){
    alert($('form').serialize());
});
0
PaulBGD

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;
}
0
MistyDawn

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.

0
user3261392

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.

0
Ismael Sarmento

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 .

0
grvsmth