我一直在尝试使用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>
我还尝试了以下解决方法:将输入类型设置为“text”,然后使用“display:none”样式作为输入框。但是,这也失败了! 似乎jQuery在设置隐藏或不可见的输入字段时遇到了一些麻烦。
有什么想法吗?有没有可行的解决方法?
答案 0 :(得分:283)
:text
的输入, hidden
将失败。使用它也更有效:
$("#texens").val("tinkumaster");
ID属性在网页上应该是唯一的,请确保这些属性可能会导致您遇到的任何问题,并且指定更复杂的选择器只会减慢速度并且看起来不那么整洁。
http://jsbin.com/elovo/edit的示例,使用http://jsbin.com/elovo/2/edit
上的示例代码答案 1 :(得分:60)
如果您在设置隐藏字段的值时遇到问题,因为您正在向其传递ID,这就是解决方案:
而不是$("#hidden_field_id").val(id)
只做$("input[id=hidden_field_id]").val(id)
。不确定区别是什么,但它确实有效。
答案 2 :(得分:25)
最后,我找到了一个解决方案,它很简单:
document.getElementById("texens").value = "tinkumaster";
像魅力一样工作。不知道为什么jQuery不会回归到这个。
答案 3 :(得分:18)
我有同样的问题。奇怪的是谷歌铬和可能其他人(不确定)不喜欢
$("#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" />
变化!!
必须是“字符串”
答案 4 :(得分:10)
$('input[name=hidden_field_name]').val('newVal');
为我工作,两者都没有
$('input[id=hidden_field_id]').val('newVal');
,也不
$('#hidden_field_id').val('newVal');
确实
答案 5 :(得分:9)
.value对我不起作用,因为我抓住了值属性服务器端,并且值并不总是更新。所以我用过:
var counter = 0;
$('a.myClickableLink').click(function(event){
event.preventDefault();
counter++;
...
$('#myInput').attr('value', counter);
}
希望它有所帮助。
答案 6 :(得分:7)
实际上,这是一个持续存在的问题。虽然Andy对下载的源代码是正确的,但.val(...)和.attr('value',...)似乎并没有真正修改html。我认为这是一个javascript问题而不是一个jquery问题。如果你曾经使用过firebug甚至你会遇到同样的问题。虽然看起来如果您提交带有修改后的值的表单,它将会通过,但html不会改变。我遇到了这个问题,尝试创建修改后的表单的打印预览(执行[form] .html())它复制一切正常,包括所有更改除了值更改。因此,我的模态打印预览有点无用......我的解决方法可能必须是“构建”包含已添加的值的隐藏表单,或者单独生成预览并使用户进行的每个修改也修改预览。两者都不是最理想的,但除非有人弄清楚为什么价值设定行为不会改变html(在我假设的DOM中),它将不得不这样做。
答案 7 :(得分:4)
我遇到了同样的问题,我发现了什么是错的。我将HTML定义为
<form action="url" method="post">
<input type="hidden" id="email" />
<form>
<script>
function onsomeevent()
{
$("#email").val("a@a.com");
}
</script>
在服务器上读取表单值总是导致电子邮件为空。在我挠头(和众多搜索)之后,我意识到错误并没有正确定义表格/输入。在修改输入时(如下所示),它就像一个魅力
<input type="hidden" id="email" name="email" />
如果其他人遇到同样的问题,请添加到此主题。
答案 8 :(得分:2)
在我的情况下,我使用非字符串(整数)作为val()的参数,这不起作用,技巧就像
一样简单$("#price").val('' + price);
答案 9 :(得分:1)
这里的另一个问题浪费了我的一些时间,所以我想我会传递一下。我有一个隐藏的领域我给了一个id。名称中的[]
括号(由于与struts2一起使用)而选择器$("#model.thefield[0]")
找不到我的隐藏字段。重命名id不使用句点和括号导致选择器开始工作。所以最后我最终得到了model_the_field_0
的id而且选择器运行正常。
答案 10 :(得分:1)
使用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);
}
}
答案 11 :(得分:0)
使用ID:
$('input:hidden#texens').val('tinkumaster');
使用class:
$('input:hidden.many_texens').val('tinkumaster');
答案 12 :(得分:0)
只需使用以下语法获取并设置
<强> GET 强>
//Script
var a = $("#selectIndex").val();
这里变量将保存hiddenfield(selectindex)的值
服务器端
<asp:HiddenField ID="selectIndex" runat="server" Value="0" />
<强> SET 强>
var a =10;
$("#selectIndex").val(a);
答案 13 :(得分:0)
如果您要搜索haml,那么这就是隐藏字段将值设置为
这样的隐藏字段的答案。%input#forum_id.hidden
在您的jquery中,只需将值转换为字符串,然后在jquery中使用attr属性附加即可。希望这也适用于其他语言。
$('#forum_id').attr('val',forum_id.toString());
答案 14 :(得分:-1)
<javascript>
slots=''; hidden=''; basket = 0;
cost_per_slot = $("#cost_per_slot").val();
//cost_per_slot = parseFloat(cost_per_slot).toFixed(2)
for (i=0; i< check_array.length; i++) {
slots += check_array[i] + '\r\n';
hidden += check_array[i].substring(0, 8) + '|';
basket = (basket + parseFloat(cost_per_slot));
}
// Populate the Selected Slots section
$("#selected_slots").html(slots);
// Update hidden slots_booked form element with booked slots
$("#slots_booked").val(hidden);
// Update basket total box
basket = basket.toFixed(2);
$("#total").html(basket);
答案 15 :(得分:-1)
其他任何正在努力解决这个问题的人,有一种非常简单的“内联”方式可以用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事件将文本输入到可见输入中。您希望将字段值传递给“高级搜索”表单并且不强制用户重新键入其搜索查询的情况(例如在我的情况下)。