【发布时间】:2011-11-05 22:32:01
【问题描述】:
我有以下问题:
我有一个需要序列化的表单,但我正在使用 javascript 来更改选择字段的外观。这意味着,使用 display:none 隐藏真正的选择字段。 我现在的问题是,jQuery 确实识别隐藏的选择,但只序列化第一个值而不是选定的值。
<select name="publish">
<option value="1">yes</option>
<option value="2" selected="selected">no</option>
</select>
jQuery.serialzie: 发布=1
所以它给了我第一个而不是正确的值。
有什么解决方法的想法吗?
解决方案
好的,正如 RobW 所提到的,最好的解决方案可能是让 JavaScript 通过设置 selectElement.selectedIndex = 5
但是我的解决方案有点不同,因为我不想更改用于更改我的选择外观的插件,因为维护问题(例如,每次发布新版本时都需要更改脚本) . 我只是使用了一个自定义函数进行序列化。
(function($) {
$.fn.serializer = function() {
var toReturn = [];
var elements = $(this).find(':input').get();
$.each(elements, function() {
if (this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password/i.test(this.type)))
{
var val = $(this).val();
// if is select, check selected
if(this.nodeName == "SELECT")
{
val = $(this).find('option:selected').val();
}
toReturn.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( val ) );
}
});
return toReturn.join("&").replace(/%20/g, "+");
}
})(jQuery);
【问题讨论】:
标签: jquery forms serialization