2012-01-22 44 views
2

以下是我想要在我的JQuery脚本中执行的操作。在下面的提交函数(4th)中,我想确定表单是否具有文件输入,并使用ajax提交,或者仅提交一个没有Ajax的常规表单。换句话说,如果表单已上传,请定期提交。JQuery从内部提交函数提交表单

我在下面的提交函数中写了个问题。这是我需要做的唯一工作。

谢谢!

function FindFileInput(){ 
    // check for file input 
    var FileInput = $('input:file'); 
    if(FileInput.length > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

function validation(){ 
    // code to validate form 
    ... 
} 

function ajaxSubmit(formData){ 
    $.ajax({ 
     // ajax submit code 
    }); 
} 

$(myForm).submit(function(e){ 
    e.preventDefault(); 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
     // serialize and call ajaxSubmit function 
     } 
    } 

    // 2. if file input IS present 
    if(FindFileInput() === true){ 
     if(validation() === true){ 
     // QUESTION: How do I submit the form here??? 
     } 
    } 
}); 

回答

3

http://api.jquery.com/submit/

现在提交表单时,该消息被惊动。在实际提交之前发生 ,所以我们可以通过调用 调用事件对象上的.preventDefault()或通过从我们的处理程序返回假 来取消提交操作。当单击另一个 元素时,我们可以手动触发该事件:

因此,请翻转您的逻辑。不要调用e.preventDefault()作为默认值,然后尝试撤消它,而是只在实际需要时调用它。

$(myForm).submit(function(e){ 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
      ajaxSubmit(formdata); 
     } 
    } 

    // 2. if file input IS present 
    if(FindFileInput() === true){ 
     if(validation() === true){ 
      return true; // submit form as normal, don't call e.preventDefault() 
     } 
    } 

    // Prevent form from submitting normally 
    e.preventDefault(); 
    return false; 
}); 
+1

谢谢!上述建议也起到了作用,但从编程和学习的角度来看,这更有意义。 – user1002039

0

如果您希望继续提交,请不要​​阻止默认行为并返回true。

$(myForm).submit(function(e){ 

    if(!FindFileInput()){ 
     if(validation()){ 
      //AJAX method 
     } 
    }else{ 
     if(validation()){ 
      return true; 
     } 
    } 
    e.preventDefault(); 
    return false; 
}); 
0

别叫e.preventDefault()这么早,做到这一点只有当你真正想从被张贴的默认方式(因此,当选择一个文件),停止形式。这样你就可以摆脱第二个if语句,并且只要让提交JS函数在发送文件时不做任何事情。这样,如果没有选择文件,表单将以默认方式发送。

$(myForm).submit(function(e){ 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
     e.preventDefault(); 
     // Do your AJAX-stuff here 
     } 
    } 

}); 
0

简单!我删除了e.preventDefault();并添加了其他一些条件。但是,我提供了一个非常程序化(较不理想)的解决方案。

$(myForm).submit(function(e){ 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
     // serialize and call ajaxSubmit function 

     return false; // stops form submissions, same as preventDefault but less chars. 
     } 
    } 

    // 2. if file input IS present 
    if(FindFileInput() === true){ 
     if(validation() === true){ 
     // QUESTION: How do I submit the form here??? 
     // no return false, moves forward. 
     } else { 
      return false; 
     } 
    } else { 
     return false; 
    } 
});