【问题标题】:jQuery .val() not working for input fieldsjQuery .val() 不适用于输入字段
【发布时间】:2014-02-19 20:03:15
【问题描述】:

我正在尝试捕获我的输入字段的值,并在我的表单类中有以下方法来做到这一点:

getData: function() {
    var fields = ['name', 'email', 'message'];
    $.each(fields, function(index, el) {
        form.data[el] = $('#'+el).val();
        console.log(form.data[el]);
    });
},

(不要介意“选择”字段,这是一个定制的选择框,我必须以不同的方式处理它) 我对表单更改事件执行捕获。 输入字段都有正确的 id,它们看起来像这样:

<input type="text" id="name">
<input type="email" id="email">
<textarea name="message" id="message"></textarea>

现在,当我在字段中输入内容时,我只能从 textarea 中获取值,而其他输入给我 undefined。

我还会注意到表单是使用 Ajax 加载的,但由于它通常会捕获字段上的更改事件,我怀疑这是否是问题所在。

【问题讨论】:

  • 确认您没有任何其他具有重复 ID 的元素导致问题 - 因为这应该工作。
  • 是的,当然,form.data[el] = $('#'+el).val(); 这个语句实际上需要通过name attr 映射。无论如何用自我回答来结束问题。

标签: jquery forms input


【解决方案1】:

我想通了。

我的输入字段中缺少 name 属性,出于某种原因 .val() 需要它来工作。

【讨论】:

【解决方案2】:

“根据 W3C 的建议,如果输入字段具有控件名称,则 html for 只能发送数据。ID 不计算在内。”好吧,这一切都很好(实际上是无价的),但是如果您查看this examplejQuery .val() 会让人相信它可以愉快地使用id= 作为选择器。我的测试表明不仅必须有id=name=,而且它们必须相同。当它起作用时,我非常喜欢这些东西!

【讨论】:

    【解决方案3】:

    不,您不必同时具有 name 和 id 属性才能使 val 起作用。 我已经测试过了,只有 id , .val() 工作正常

    【讨论】:

    • 也许 .val() 的行为在最近的 jQuery 版本中有所改变。
    【解决方案4】:

    感谢@nick-dickinson-wilde 的评论。 我有同样的问题。我想获取以下输入的值。

    &lt;input id="ipValue" class="form-control" type="text" value="@Model.IPValue" /&gt;

    我很惊讶以下不起作用。

    javascript var ipValue = $("#ipValue").val();

    我没有注意到我有一个具有相同 ID 的元素 &lt;div class="col-3" id="ipValue"&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2015-07-20
      • 1970-01-01
      • 2017-04-05
      • 2011-04-13
      相关资源
      最近更新 更多