2009-09-25 5 views
7

J'ai une forme dynamique où l'utilisateur fournit un nom et une description:Pourquoi .val() n'est pas une fonction?

<label>Name</label><br /> 
<input type="text" name="name[]" maxlength="255" /><br /> 

<label>Description</label><br /> 
<textarea name="desc[]"></textarea><br /> 

Je suis en train de valider le formulaire avec JavaScript pour faire en sorte que si le nom est spécifié, une description doit être saisi.

$("input[name='name[]']").each(function() { 
    var index = $("input[name='name[]']").index(this); 
    if ($(this).val() != '') { 
     alert($("textarea[name='desc[]']").get(index).value); 
     alert($("textarea[name='desc[]']").get(index).val()); 
    } 
} 

La première alerte() fonctionne comme prévu mais avec la deuxième alerte, je reçois: $ ("textarea [name = 'desc []']") get (index) .val() n'est pas. une fonction

Quelle est la différence? Pourquoi ne puis-je pas utiliser la fonction jQuery?

+0

Vos étiquettes sont plutôt inutiles car ils sont en ce moment. Donnez-leur les attributs "for" appropriés et associez-les aux éléments input/textarea correspondants. – kangax

Répondre

15

Utilisez eq(index) au lieu de get(index) et il retournera un objet jQuery. L'objet jQuery aura une méthode val() qui devrait fonctionner comme prévu pour une zone de texte.

val() documentation

Une valeur est renvoyée pour tous les éléments d'entrée , y compris sélectionne et textareas. Pour plusieurs sélections, un tableau de valeurs est renvoyé.

Exemple:

$("input[name='name[]']").each(function() { 
    var index = $("input[name='name[]']").index(this); 
    if ($(this).val() != '') { 
     alert($("textarea[name='desc[]']").eq(index).val()); 
    } 
}); 
17

Parce que

$("textarea[name='desc[]']").get(index); 

est objet DOM, non jquery. Il n'a pas de méthode val. Utiliser

$("textarea[name='desc[]']:eq(" + index + ")").val(); 

pour la valeur de la zone de texte.

Questions connexes