2009-09-25 16 views
7

私は、ユーザーが名前と説明を提供する動的フォームを持っています。.val()はなぜ関数ではありませんか?

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

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

名前を指定すると、記述を入力する必要があることを確認するために、Javascriptでフォームを検証しようとしています。

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

最初のアラート()は期待どおりに機能しますが、2番目のアラートが表示されます: $( "textarea [name = 'desc []']")。get(index).val()関数

違いは何ですか?なぜjQuery関数を使用できないのですか?

+0

あなたのラベルはかなり役に立ちません。それらに適切な "for"属性を与え、対応するinput/textarea要素に関連付けます。 – kangax

答えて

15

​​の代わりにeq(index)を使用すると、jQueryオブジェクトが返されます。 jQueryオブジェクトには、テキストエリアに期待どおりに機能するval()メソッドがあります。

val() documentation

値を選択して テキストエリアを含むすべての入力 要素に対して返されます。複数選択の場合は、 値の配列が返されます。

例:彼らは今あるよう

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

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

は、DOMオブジェクトではなく、jqueryのであるから。メソッドvalはありません。

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

をテキストエリアの値として使用します。

関連する問題