我正在挖掘jquery生产文件,似乎没有一个明确的元素列表jquery将序列化。 IE如何知道序列化输入和选择?我很好奇,因为我有一个常用的功能来序列化我的表单,首先做一些复选框值转换等。我希望它做的下一件事是忽略所有具有“假”
类的表单输入/选择var postData = form.find('input, select').not('.fake').serialize();
这实际上很有效,但我担心还有更多我想不到的可序列化的表单元素,并且我将来会遇到问题。我现在无法想到任何其他元素,也许将来会有一些元素被添加。
有没有更好的方法来证明这一点?
答案 0 :(得分:1)
jQuery目前(1.11.3)检查input
,select
,textarea
和keygen
元素。
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);