2009-09-25 12 views
7

Mam dynamiczny formularz, w którym użytkownik dostarcza nazwę i opis:Dlaczego funkcja .val() nie jest funkcją?

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

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

próbuję sprawdzić poprawność formularza z JavaScript, aby zapewnić, że jeśli nazwa jest określona, ​​wówczas opis musi być wprowadzony.

$("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()); 
    } 
} 

Pierwszy alert() działa zgodnie z oczekiwaniami, jednak z drugiej alert uzyskać: $ ("textarea [name = 'desc []']") dostać (indeks) .val() nie jest. funkcja

Jaka jest różnica? Dlaczego nie mogę korzystać z funkcji jQuery?

+0

Etykiety są raczej bezużyteczne, ponieważ są one teraz. Nadaj im odpowiednie atrybuty "dla" i skojarz je z odpowiednimi elementami input/textarea. – kangax

Odpowiedz

15

Użyj eq(index) zamiast get(index) i zwróci obiekt jQuery. Obiekt jQuery będzie miał metodę val(), która powinna działać zgodnie z oczekiwaniami dla obszaru tekstowego.

val() documentation

wartość ustalana jest dla wszystkich wejściowych elementów, oraz wybiera i pola tekstowe. W przypadku wielokrotnych wyborów zwracana jest tablica wartości .

Przykład:

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

Ponieważ

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

jest przedmiotem DOM nie jQuery. Nie ma metody val. Użyj wartości dla wartości textarea.