【问题标题】:Why is .val() not a function?为什么 .val() 不是函数?
【发布时间】:2009-09-25 21:09:02
【问题描述】:

我有一个用户提供名称和描述的动态表单:

<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[name='desc[]']").get(index).val() 不是函数

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

【问题讨论】:

  • 你的标签和现在一样没用。给它们适当的“for”属性并与相应的输入/文本区域元素相关联。

标签: javascript jquery


【解决方案1】:

因为

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

是 DOM 对象,而不是 jquery。它没有方法val。使用

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

用于 textarea 值。

【讨论】:

    【解决方案2】:

    使用eq(index) 而不是get(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());
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2012-11-04
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多