使用jQuery的".val()"在表单中设置隐藏字段的值不起作用

tex*_*ens 184 jquery set hidden-fields

我一直在尝试使用jQuery在表单中设置隐藏字段的值,但没有成功.

以下是解释问题的示例代码.如果我将输入类型保持为"文本",它可以毫无困难地工作.但是,将输入类型更改为"隐藏",不起作用!

<html>

    <head>
        <script type="text/javascript" src="jquery.js">
        </script>
        <script type="text/javascript">
            $(document).ready(function() {
                $("button").click(function() {
                    $("input:text#texens").val("tinkumaster");
                });
            });
        </script>
    </head>

    <body>
        <p>
            Name:
            <input type="hidden" id="texens" name="user" value="texens" />
        </p>
        <button>
            Change value for the text field
        </button>
    </body>

</html>
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下解决方法,将输入类型设置为"text",然后使用"display:none"样式作为输入框.但是,这也失败了!似乎jQuery在设置隐藏或不可见的输入字段时遇到了一些麻烦.

有任何想法吗?有没有一个解决方法实际上有效?

And*_*y E 304

:text对于类型值为的输入将失败hidden.使用它也更有效:

$("#texens").val("tinkumaster");
Run Code Online (Sandbox Code Playgroud)

ID属性在网页上应该是唯一的,请确保它们可能会导致您遇到的任何问题,并且指定更复杂的选择器只会减慢速度并且看起来不那么整洁.

在例如http://jsbin.com/elovo/edit,使用您的样例代码中,http://jsbin.com/elovo/2/edit

  • @texens:没问题.如果您使用Firefox,我会建议使用适当的调试工具[Firebug](http://getfirebug.com),而不是查看源代码."查看源"的行为在所有浏览器中或多或少相同,并将显示页面的下载的,未修改的源代码. (2认同)
  • 我认为问题不在于Firefox或特定工具,而在于如何呈现和显示修改后的HTML.我有与OP相同的情况,除了涉及更多的jQuery.在我的例子中,就像在这个中一样,代码正常工作 - click事件正确地更新了"hidden"类型的输入 - 但是Firebug没有显示隐藏字段的更新值,即使它们已经更新并且jQuery可以访问它们,即使可见字段的更新值正确显示在Firebug中. (2认同)

Chu*_*ebs 60

如果您在设置隐藏字段的值时遇到问题,因为您正在向其传递ID,那么这就是解决方案:

而不$("#hidden_field_id").val(id)只是做$("input[id=hidden_field_id]").val(id).不确定区别是什么,但它确实有效.

  • 请注意,在旧浏览器中这可能会非常慢(http://learn.jquery.com/using-jquery-core/selecting-elements/) (3认同)

zam*_*ber 24

最后,我找到了一个解决方案,它很简单:

document.getElementById("texens").value = "tinkumaster";
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.不知道为什么jQuery不会回到这一点.


小智 18

我有同样的问题.奇怪的是谷歌铬和可能其他人(不确定)不喜欢

$("#thing").val(0);

input type="hidden" id="thing" name="thing" value="1" />
Run Code Online (Sandbox Code Playgroud)

(没变)

$("#thing").val("0");

input type="hidden" id="thing" name="thing" value="1" />
Run Code Online (Sandbox Code Playgroud)

(没变)

但这很有效!!!!

$("#thing").val("no");

input type="hidden" id="thing" name="thing" value="no" />
Run Code Online (Sandbox Code Playgroud)

变化!!

$("#thing").val("yes");

input type="hidden" id="thing" name="thing" value="yes" />
Run Code Online (Sandbox Code Playgroud)

变化!!

必须是一个"字符串的东西"

  • 这也为我修好了.我最终使用`.val('0')`,它在Javascript中被`parseInt`正确解析,在我的后端用Python中的`int()`解析. (2认同)

小智 10

$('input[name=hidden_field_name]').val('newVal');
Run Code Online (Sandbox Code Playgroud)

为我工作,当时都没有

$('input[id=hidden_field_id]').val('newVal');
Run Code Online (Sandbox Code Playgroud)

也不

$('#hidden_field_id').val('newVal');
Run Code Online (Sandbox Code Playgroud)

没有.


Sop*_*hie 8

.val对我没有用,因为我抓住了值属性服务器端,并且值并不总是更新.所以我用过:

var counter = 0;
$('a.myClickableLink').click(function(event){
   event.preventDefault();
   counter++;

   ...
   $('#myInput').attr('value', counter);
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人.


小智 7

实际上,这是一个持续存在的问题.虽然Andy对下载的源代码是正确的,但.val(...)和.attr('value',...)似乎并没有真正修改html.我认为这是一个javascript问题而不是 jquery问题.如果你曾经使用过firebug,那么你会遇到同样的问题.虽然看起来如果您提交带有修改后的值的表单,它将会通过,但html不会改变.我遇到了这个问题,尝试创建修改后的表单的打印预览(执行[form] .html())它复制一切正常,包括所有更改,除了价值变化.因此,我的模态打印预览有点无用......我的解决方法可能必须是"构建"包含已添加的值的隐藏表单,或者单独生成预览并使用户进行的每个修改也修改预览.两者都不是最理想的,但除非有人弄清楚为什么价值设定行为不会改变html(在我假设的DOM中),它必须这样做.


Jar*_*alu 5

我遇到了同样的问题,我发现出了什么问题。我将 HTML 定义为

<form action="url" method="post">
    <input type="hidden" id="email" />
<form>
<script>
    function onsomeevent()
    {
       $("#email").val("a@a.com");
    }
</script>
Run Code Online (Sandbox Code Playgroud)

读取服务器上的表单值总是导致电子邮件为空。在挠头(和大量搜索)之后,我意识到错误是没有正确定义表单/输入。在修改输入时(如下所示),它就像一个魅力

<input type="hidden" id="email" name="email" />
Run Code Online (Sandbox Code Playgroud)

如果其他人有同样的问题,请添加到此线程。