jQuery表单插件,ajaxForm()但带有条件字段

时间:2012-07-27 02:27:26

标签: jquery jquery-plugins jquery-forms-plugin

我需要上传一个带有ajaxForm()的表单(或者我认为,因为fieldSerialize()似乎没有正确地序列化文件字段。)

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

或者我如何使用ajaxSubmit()或fieldSerialize()以便它也支持文件上传文件。让我们说对于EG我想要在其上排除带有hiddenField类的字段。

谢谢!

2 个答案:

答案 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;

}