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

下面是解释该问题的示例代码。如果我保持输入类型为“文本”,它工作起来没有任何麻烦。但是,将输入类型更改为“hidden”,却不起作用!

<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>

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

什么好主意吗?有没有可行的解决办法?


当前回答

如果你正在搜索haml,那么这是隐藏字段的答案,将值设置为一个隐藏字段,如

%input#forum_id.hidden

在jquery中,只需将值转换为字符串,然后使用jquery中的attr属性附加它。希望这也适用于其他语言。

$('#forum_id').attr('val',forum_id.toString());

其他回答

任何人谁是与此斗争,有一个非常简单的“内联”方法来做到这一点与jQuery:

<input type="search" placeholder="Search" value="" maxlength="256" id="q" name="q" style="width: 300px;" onChange="$('#ADSearch').attr('value', $('#q').attr('value'))"><input type="hidden" name="ADSearch" id="ADSearch" value="">

当使用onChange事件将文本输入可见输入时,设置隐藏字段的值。如果你想把字段值传递给“高级搜索”表单,而不是强迫用户重新输入他们的搜索查询,这是很有用的(就像在我的例子中)。

如果你在设置一个隐藏字段的值时遇到了麻烦,因为你传递了一个ID给它,这是解决方案:

用$("input[id=hidden_field_id]").val(id)代替$("#hidden_field_id").val(id)。不知道有什么区别,但确实有效。

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

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

input type="hidden" id="thing" name="thing" value="1" />

(没有变化)

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

input type="hidden" id="thing" name="thing" value="1" />

(没有变化)

但这是可行的!!!!

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

input type="hidden" id="thing" name="thing" value="no" />

改变! !

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

input type="hidden" id="thing" name="thing" value="yes" />

改变! !

一定是“字符串的东西”

在我的情况下,我使用了一个非字符串(整数)作为val()的参数,这并不管用,技巧就像

$("#price").val('' + price);

.val没有为我工作,因为我抓取值属性服务器端和值并不总是更新。所以我用了:

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

   ...
   $('#myInput').attr('value', counter);
}

希望它能帮助到别人。