为什么.val()不是一个函数?

8
我有一个动态表单,用户需要提供名称和描述:
<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());
    }
}

第一个alert()按预期工作,但是第二个alert会出现以下错误: $("textarea[name='desc[]']").get(index).val()不是一个函数
这两者有什么区别?为什么我不能使用jQuery函数?

你现在的标签相当无用。请给它们适当的“for”属性,并与相应的输入/文本区域元素关联起来。 - kangax
2个回答

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

这是一个 DOM 对象,不是 jQuery 对象。它没有 val 方法。使用

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

获取textarea的值。


16

使用eq(index)而不是get(index),它将返回一个jQuery对象。该jQuery对象将有一个val()方法,应该可以按预期工作于文本区域。

val()文档

对所有输入元素(包括选择器和文本区域)都会返回值。对于多个选择器,将返回值数组。

示例:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接