无法使用jQuery设置隐藏输入字段的值

35
我有一个简单的输入框位于一个表单标签内:
<body>
  <form action="#">
      <label>Input</label>
      <input type="hidden" id="foo" name="foo" />

  </form>
</body>

我尝试从一个JS文件中设置这个值:

$(document).ready(function(){
    $('#foo').val('foo')
})

但在HTML源代码中,该属性根本没有被设置。如果我尝试将输入类型设置为“button”或其他任何内容,它都有效。我只是不能用hidden输入字段来做到这一点。我做错了什么?


如果您给输入字段一个初始值,这会有帮助吗?(即使它是一个空字符串) - Jasper De Bruijn
5
被接受的答案并没有回答实际问题,尽管它有助于找到解决方案。考虑到这个问题每年都会有超过10k的浏览量,最好接受一个真正正确的答案。 - Brian Webster
11个回答

26

如果设置了val标签,您是否可以从隐藏字段中检索值?

例如:

<input type="hidden" id="foo" name="foo" value="bar" />

$(document).ready(function(){
  alert($('#foo').val());
})

17
澄清一下:作者试图通过“查看源代码”来查看修改后的值。需要注意的是,通过动态修改DOM进行的更改不会在“查看源代码”中显示。 - jjmontes
有一个奇怪的问题,当你需要克隆隐藏输入时:http://jsfiddle.net/YvBfP/ - max4ever

25

我明白了。该值是由jQuery设置的,但是当我查看源代码时,新值并没有显示出来。我尝试了这个方法(感谢Fermin):

$('#foo').val('poo')
alert($('#foo').val())

并且它显示了修改后的值。


1
我建议使用像火狐浏览器的Firebug这样的开发工具,以更轻松地查看动态源代码。 - David Hellsing
Firefox的Web Developer插件还有一个“查看生成的源代码”工具,它将显示应用了所有JavaScript更改的源代码。 - Brad Mace

22

3
它之所以有效,是因为这里的“Data”是指输入的“名称”,而不是ID。无论如何,我会点赞,因为我也忘记了这一点。 - Hoàng Long

4

我也一直在为此苦苦挣扎。如果您设置一个初始值,比如“0”,然后使用类似Firebug的工具观察DOM,您会注意到DOM随后会更新。由于某种原因,如果将初始值设置为null或空字符串,则DOM不会更新,但是实际上该值仍然存储。

您可以按照之前的帖子建议,在设置值后弹出val来测试此功能。


2

当我使用POST提交表单时,我的PHP脚本无法获取POST的值。我使用了以下代码:

$('#elemId').attr("name", theValue);
希望这能有所帮助。

1

我知道现在可能有点晚了,但这可能会对某些人有所帮助...... 如果以上解决方案都不起作用,只需执行以下操作...

$(document).ready(function() {
$('#foo').attr("value","foo") });

1

我需要看整个文件,但我猜测你要么没有包含jQuery.js源文件,要么有多个ID为foo的元素。


呵呵...我在两个表单中有两个相同的ID,你的答案让我想到了检查这个问题...谢谢! - citraL

1

我在使用隐藏的输入字段时遇到了同样的问题。 如果我将初始值设置为0,它可以正常工作,但有时我不想要一个初始值为0的值。 所以我尝试使用value=" ",一个空格,这对我也起作用。 如果您从PHP动态填充值,则可以使用value="<?= $val+0; ?>",如果0可以接受的话,或者value="<?= $val; ?> ",如果空格可以接受的话。


可以确认。当使用""初始化隐藏输入字段时,我在使用jQuery更新它时遇到了问题。但是,当我使用0进行初始化时,它对我起作用了。 - Erik Kalkoken

0

与其将你的value属性初始化为字符串,请像这样初始化你的输入。

<input type="hidden" name="foo" id="foo" value="${foo}">
"

"foo"将包含您设置的新值。

"

0

我已确认使用类似于jQuery选择器的方式设置隐藏字段的值是无效的...

$('[name="my_field"]').val('Something');

不会更新隐藏字段...有点令人震惊。

<input type="hidden" name="my_field" id="my_field">

不得不使用 CSS 隐藏字段。

<input type="text" name="my_field" id="my_field" style="display:none">

显然,使用隐藏字段的id存在其他问题... 使用jQuery的".val()"设置表单中隐藏字段的值无效

注意:一定要在控制台中获取值,而不是通过检查元素。

$('[name="my_field"]').val();

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