jQuery序列化隐藏(显示:无)表单元素不起作用。解决办法?

jQuery序列化隐藏(显示:无)表单元素不起作用。解决办法?,jquery,forms,serialization,Jquery,Forms,Serialization,我有以下问题: 我有一个表单需要序列化,但我正在使用javascript来更改选择字段的外观。这意味着,使用display:none隐藏真正的选择字段。 我现在的问题是,jQuery确实识别隐藏的选择,但只序列化第一个值,而不是所选值 是 否 jQuery.serialzie:publish=1 所以它给出了第一个值,但不是正确的值 有什么解决办法吗 解决方案 好的,正如RobW所提到的,最好的解决方案可能是通过设置selectElement.selectedIndex=5 然而,我的解决方

我有以下问题:

我有一个表单需要序列化,但我正在使用javascript来更改选择字段的外观。这意味着,使用display:none隐藏真正的选择字段。 我现在的问题是,jQuery确实识别隐藏的选择,但只序列化第一个值,而不是所选值




jQuery.serialzie:publish=1

所以它给出了第一个值,但不是正确的值

有什么解决办法吗

解决方案
好的,正如RobW所提到的,最好的解决方案可能是通过设置
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);

如果问题是由隐藏元素引起的,请在序列化之前临时显示这些元素:

var $form = $('#myForm');
var hidden = $form.find(':hidden'); // Select all hidden elements
hidden.show();                      // Show them
var string = $form.serialize();     // Serialize form
hidden.hide();                      // Hide them again
编辑:您似乎试图通过设置
selected=selected
属性来选择一个选项。您应该使用
selectedIndex
更改所选选项:

var select = $("#myselect")[0]; //DOM element
select.selectedIndex = 5;       //Example, select 6th option

是的,好主意,我试过了,但问题似乎是别的。当我使用正常的下拉菜单时,它会工作。我想可能是serialize不喜欢selected=“selected”。可能吗?因为我使用的脚本将selected下拉字段设置为selected,但是当您通常选择select的一个选项时,它不会设置为selected。这可能是问题所在吗?我如何阻止它?你如何选择一个选项?最佳选择方法:
selectElement.selectedIndex=5
(其中selectElement是DOM元素,5是选项的索引)。我是通过将其设置为selected=“selected”进行选择的,这显然不起作用。但我想你的很管用。如果你能把它作为一个答案,我可以检查它。谢谢