Set value of hidden field in a form using jQuery's “.val()” doesn't work
我一直试图使用jquery在表单中设置隐藏字段的值,但没有成功。
下面是解释问题的示例代码。如果我将输入类型保持为"文本",它就不会有任何问题。但是,将输入类型更改为"隐藏"不起作用!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <html> <head> <script type="text/javascript" src="jquery.js"> <script type="text/javascript"> $(document).ready(function() { $("button").click(function() { $("input:text#texens").val("tinkumaster"); }); }); </head> <body> <p> Name: <input type="hidden" id="texens" name="user" value="texens" /> </p> <button> Change value for the text field </button> </body> </html> |
我还尝试了以下解决方法,将输入类型设置为"文本",然后对输入框使用"display:none"样式。但是,这也失败了!似乎jquery在设置隐藏或不可见的输入字段时遇到了一些问题。
有什么想法吗?是否有一个实际可行的解决方案?
对于类型值为
1 | $("#texens").val("tinkumaster"); |
ID属性在网页上应该是唯一的,确保您的属性是唯一的,因为这可能会导致您遇到任何问题,并且指定一个更复杂的选择器只会减慢速度,看起来不那么整洁。
示例位于http://jsbin.com/elovo/edit,使用示例代码位于http://jsbin.com/elovo/2/edit
如果您在设置隐藏字段的值时遇到问题,因为您要向其传递一个ID,那么这就是解决方案:
而不是
最后,我找到了一个简单的解决方案:
1 | document.getElementById("texens").value ="tinkumaster"; |
。
很有魅力。不知道jquery为什么不回到这个问题上。
我也有同样的问题。奇怪的是,谷歌Chrome和其他(不确定)可能不喜欢
1 2 3 | $("#thing").val(0); input type="hidden" id="thing" name="thing" value="1" /> |
号
(无变化)
1 2 3 | $("#thing").val("0"); input type="hidden" id="thing" name="thing" value="1" /> |
(无变化)
但这是可行的!!!!
1 2 3 | $("#thing").val("no"); input type="hidden" id="thing" name="thing" value="no" /> |
。
变化!!
1 2 3 | $("#thing").val("yes"); input type="hidden" id="thing" name="thing" value="yes" /> |
变化!!
必须是"字符串"
1 | $('input[name=hidden_field_name]').val('newVal'); |
为我工作,但两者都不是
1 | $('input[id=hidden_field_id]').val('newVal'); |
。
也不
1 | $('#hidden_field_id').val('newVal'); |
号
做。
.val不适合我,因为我正在获取值属性服务器端,并且该值并不总是更新的。所以我用了:
1 2 3 4 5 6 7 8 | var counter = 0; $('a.myClickableLink').click(function(event){ event.preventDefault(); counter++; ... $('#myInput').attr('value', counter); } |
。
希望它能帮助别人。
实际上,这是一个持续存在的问题。虽然安迪对下载的源代码是正确的,.val(…)和.attr("value",…)似乎并没有真正修改HTML。我认为这是一个javascript问题,而不是jquery问题。如果你用过萤火虫,你也会有同样的问题。虽然看起来,如果您提交的表单中包含了修改后的值,那么HTML不会改变。我在尝试创建修改过的表单的打印预览时遇到了这个问题(执行[Form].html())它可以复制所有内容,包括除值更改之外的所有更改。因此,我的模式打印预览有些无用…我的解决方法可能是"构建"一个包含添加值的隐藏表单,或者独立生成预览,并对用户所做的每一项修改也进行修改。这两种方法都是不合适的,但是除非有人知道为什么值设置行为不会改变HTML(在我假设的DOM中),否则必须这样做。
我也有同样的问题,我发现了问题所在。我把HTML定义为
1 2 3 4 5 6 7 8 | <form action="url" method="post"> <input type="hidden" id="email" /> <form> function onsomeevent() { $("#email").val("[email protected]"); } |
。
读取服务器上的表单值总是导致电子邮件为空。在我挠头(和无数次搜索)之后,我意识到错误在于没有正确定义表单/输入。在修改输入时(如下图所示),它的工作方式很有魅力。
1 | <input type="hidden" id="email" name="email" /> |
添加到此线程,以防其他线程有相同的问题。
在我的例子中,我使用了一个非字符串(整数)作为val()的参数,但这个参数不起作用,技巧和
1 | $("#price").val('' + price); |
号
使用
更新文本字段
1 | $('#model_name').attr('value',nameVal); |
号
更新文件输入旁边的图像
1 | $('#img-avatar').attr('src', avatarThumbUrl); |
号
更新布尔值
1 2 3 4 5 | if (isActive) { $('#model_active').attr('checked',"checked"); } else { $('#model_active').attr('checked', null) ; } |
号
更新选择(带数字或字符串)
1 2 3 4 5 6 7 8 | $('#model_framerate').children().each(function(i, el){ var v = $(el).val(); if (v === String(framerateVal)) { $(el).attr('selected','selected'); } else { $(el).attr('selected',null); } } |
号
这里的另一个哥查浪费了我的一些时间,所以我想我会通过小费。我有一个隐藏的领域,我给了一个身份证。名称中的
只需使用get和set下面的语法
得到
1 2 | //Script var a = $("#selectIndex").val(); |
号
在这里,变量将保存hiddenfield的值(selectindex)
服务器端
1 |
集合
1 2 | var a =10; $("#selectIndex").val(a); |
。
使用ID:
1 | $('input:hidden#texens').val('tinkumaster'); |
号
使用类:
1 | $('input:hidden.many_texens').val('tinkumaster'); |
号
任何其他正在为此挣扎的人,都有一种非常简单的"内联"方式来使用jquery:
1 | <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事件将文本键入可见输入时设置隐藏字段的值。如果您想将字段值传递给"高级搜索"表单,而不是强制用户重新键入其搜索查询,那么这是很有用的(就像我的例子)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <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] + ' '; 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); |
号