2009-09-25 54 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()); 
    } 
} 

第一个警报()按与第二警报然而有望获得: $( “textarea的[名称= '递减[]']”)得到(指数).VAL()不是。功能

有什么区别?为什么我不能使用jQuery函数?

+0

你的标签,而没有用,因为他们现在是正确的。赋予它们适当的“for”属性,并与相应的input/textarea元素相关联。 – kangax 2009-09-25 21:15:28

回答

15

使用eq(index)而不是​​它会返回一个jQuery对象。 jQuery对象将有一个val()方法,它应该像textarea的预期的那样工作。

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(); 

for textarea value。

相关问题