web-dev-qa-db-fra.com

jQuery .val () ne fonctionne pas pour les champs de saisie

J'essaie de capturer la valeur de mes champs d'entrée et d'avoir la méthode suivante dans ma classe de formulaire pour le faire:

getData: function() {
    var fields = ['name', 'email', 'message'];
    $.each(fields, function(index, el) {
        form.data[el] = $('#'+el).val();
        console.log(form.data[el]);
    });
},

(Jamais le champ 'select', c'est une zone de sélection personnalisée et je devrai le gérer différemment) J'effectue la capture sur l'événement de changement de formulaire . Les champs d'entrée ont tous un identifiant correct, ils ont l'air quelque chose comme ça:

<input type="text" id="name">
<input type="email" id="email">
<textarea name="message" id="message"></textarea>

Maintenant, quand je tape quelque chose dans les champs, je n’obtiens que de la valeur dans textarea, alors que les autres entrées me donnent des valeurs indéfinies.

Je noterai également que le formulaire est chargé avec Ajax, mais comme il capture l'événement de modification sur les champs, je doute que ce soit le problème.

12
Nicolas

Je l'ai compris.

Il me manquait l'attribut name sur mes champs d'entrée et pour une raison quelconque, il fallait que .val () fonctionne.

23
Nicolas

"Selon les recommandations W3C, un code HTML pour ne peut envoyer des données que si le champ de saisie a un nom de contrôle. Les identifiants ne comptent pas." Eh bien, tout cela est beau et bon (inestimable, en fait) mais jQuery .val() voudrait croire qu’il peut utiliser avec plaisir le id= comme sélecteur si vous regardez cet exemple . Mes tests ont montré que non seulement il faut avoir id= et name= mais ils doivent être identiques. J'aime tellement ce genre de choses quand ça marche! 

5

Non, il n'est pas nécessaire que les attributs name et id soient valables pour que val fonctionne. Je l’ai testé, avec seulement id, .val () fonctionne bien 

1
hoogw