0

我需要使用 ajaxForm() 上传表单(或者我相信,因为 fieldSerialize() 似乎没有正确序列化文件字段)。

如何仅使用 ajaxForm() 序列化表单中的字段子集?我尝试在 beforeSerialize() 或 beforeSubmit() 中操作 arr 或 $form 参数,但它没有这样做。

或者我如何使用 ajaxSubmit() 或 fieldSerialize() 以便它也支持文件上传文件。假设对于 EG,我只想排除带有 hiddenField 类的字段。

谢谢!

4

2 回答 2

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 ) );
    })
于 2012-07-30T00:02:52.530 回答
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;

}

于 2012-08-03T21:13:04.840 回答