jQuery .val() 不适用于输入字段

Posted

技术标签:

【中文标题】jQuery .val() 不适用于输入字段【英文标题】:jQuery .val() not working for input fields 【发布时间】: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 映射。无论如何用自我回答来结束问题。 【参考方案1】:

我想通了。

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

【讨论】:

这对我也有用,如果有人能解释为什么,我将不胜感激。 根据 W3C 的建议,html for 只能在输入字段有控件名称的情况下发送数据。 ID 不计算在内。 https://www.w3.org/TR/html401/interact/forms.html#successful-controls【参考方案2】:

“根据 W3C 的建议,如果输入字段具有控件名称,则 html for 只能发送数据。ID 不计算在内。”好吧,这一切都很好(实际上是无价的),但是如果您查看this example,jQuery .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;

【讨论】:

以上是关于jQuery .val() 不适用于输入字段的主要内容,如果未能解决你的问题,请参考以下文章

jquery 焦点回到相同的输入字段,错误不适用于所有浏览器

JQuery.Dirty 字段不适用于第一个“updateFormState”,但适用于第二个

jquery click函数不适用于每个输入字段

DirtyForms 不适用于输入隐藏字段

jQuery 我的输入不适用于新的被调用元素

添加/删除按钮不适用于重复的表单字段 - jquery