我需要上传一个带有ajaxForm()的表单(或者我认为,因为fieldSerialize()似乎没有正确地序列化文件字段。)
如何使用ajaxForm()仅序列化表单中的字段子集?我曾尝试在beforeSerialize()或beforeSubmit()中操作arr或$ form参数,但它没有这样做。
或者我如何使用ajaxSubmit()或fieldSerialize()以便它也支持文件上传文件。让我们说对于EG我想要在其上排除带有hiddenField类的字段。
谢谢!
答案 0 :(得分:4)
不会简单地将不需要的字段设置为禁用解决此问题吗?
我认为禁用字段未提交。请参阅jquery源代码>
serializeArray: function() {
return this.map(function(){
return this.elements ? jQuery.makeArray( this.elements ) : this;
})
.filter(function(){
return this.name && !this.disabled &&
( this.checked || rselectTextarea.test( this.nodeName ) ||
rinput.test( this.type ) );
})
答案 1 :(得分:0)
编写一个像这样的自定义序列化函数:注意jQuery将使用'hiddenField'类属性值过滤掉任何输入
function scrapeFormData(formName){
var frm_data = "";
$('#'+formName+' :input').not('.hiddenField').each(function(){
switch(this.type){
// handle checkbox specially
// I persisted my checkbox field this way. You can do this in a better way
case 'checkbox': {
if ($(this).attr('checked') == 'checked'){
frm_data += $(this).attr('id') + "=1&";// checked value 1
}else{
frm_data += $(this).attr('id') + "=0&";// unchecked value 0
}
break;
}
// handle radio button specially
// I persisted my radio button field this way. You can do this in a better way
case 'radio': {
if ($(this).attr('checked') == 'checked'){
//alert('checked');
frm_data += $(this).attr('id') + "=" + $(this).attr('value')+"&";
}
break;
}
default:{
frm_data += $(this).attr('id') + "=" + $(this).attr('value')+"&";
break;
}
}
});
frm_data = frm_data.substring(0,(frm_data.length - 1));
return frm_data;
}