我一直在尝试使用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似乎在设置隐藏或不可见的输入字段时遇到了一些麻烦。

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


当前回答

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

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

其他回答

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

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

使用val()不适合我。我必须在任何地方使用.attr()。此外,我有不同类型的输入,在复选框和选择菜单的情况下必须非常明确。

更新文本框

$('#model_name').attr('value',nameVal);

更新文件输入旁边的图像

$('#img-avatar').attr('src', avatarThumbUrl);

更新布尔

if (isActive) {
    $('#model_active').attr('checked',"checked");
} else {
    $('#model_active').attr('checked', null) ;
}

更新选择(包含数字或字符串)

$('#model_framerate').children().each(function(i, el){
    var v = $(el).val();
    if (v === String(framerateVal)) { 
        $(el).attr('selected','selected');
    } else {
        $(el).attr('selected',null);
    }
}

:text对于type值为hidden的输入将失败。只使用以下语句也会更有效率:

$("#texens").val("tinkumaster");

ID属性在网页上应该是唯一的,确保你的ID属性是唯一的,因为这可能会导致你遇到的任何问题,指定一个更复杂的选择器只会减慢速度,看起来不那么整洁。

http://jsbin.com/elovo/edit上的示例,使用http://jsbin.com/elovo/2/edit上的示例代码

使用ID:

$('input:hidden#texens').val('tinkumaster');

使用类:

$('input:hidden.many_texens').val('tinkumaster');

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

%input#forum_id.hidden

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

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