jQuery序列化会影响哪些元素?

时间:2015-06-23 14:37:03

标签: jquery serialization

我正在挖掘jquery生产文件,似乎没有一个明确的元素列表jquery将序列化。 IE如何知道序列化输入和选择?我很好奇,因为我有一个常用的功能来序列化我的表单,首先做一些复选框值转换等。我希望它做的下一件事是忽略所有具有“假”

类的表单输入/选择
var postData = form.find('input, select').not('.fake').serialize();

这实际上很有效,但我担心还有更多我想不到的可序列化的表单元素,并且我将来会遇到问题。我现在无法想到任何其他元素,也许将来会有一些元素被添加。

有没有更好的方法来证明这一点?

1 个答案:

答案 0 :(得分:1)

序列化元素

jQuery目前(1.11.3)检查inputselecttextareakeygen元素。

<子> serialize.js line 13
rsubmittable = /^(?:input|select|textarea|keygen)/i;

当过滤要序列化的元素时,在第93-100行使用它:

.filter(function() {
    var type = this.type;

    // Use .is( ":disabled" ) so that fieldset[disabled] works
    return this.name && !jQuery( this ).is( ":disabled" ) &&
        rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
        ( this.checked || !rcheckableType.test( type ) );
})

未来证明

就“未来验证”而言,无论你当前版本的jQuery处理什么,你都会陷入困境。确保脚本选择与jQuery相同的元素的最简单方法是序列化表单而不是元素集合:

$('.the-form').serialize();

当然,这不会过滤掉任何“假”输入,但是从上面的代码片段可以看出,禁用的元素不包含在序列化中。诀窍是禁用任何尚未禁用的假元素,然后在序列化完成后重新启用它们:

var $fakes = $('.fake:not(:disabled)').prop('disabled', true);
var serialization = $('.the-form').serialize();
$fakes.prop('disabled', false);