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 的评论。 我有同样的问题。我想获取以下输入的值。
<input id="ipValue" class="form-control" type="text" value="@Model.IPValue" />
我很惊讶以下不起作用。
javascript var ipValue = $("#ipValue").val();
我没有注意到我有一个具有相同 ID 的元素 <div class="col-3" id="ipValue">
【讨论】:
以上是关于jQuery .val() 不适用于输入字段的主要内容,如果未能解决你的问题,请参考以下文章
jquery 焦点回到相同的输入字段,错误不适用于所有浏览器