JQuery从提交函数内部提交表单
下面是我想在JQuery脚本中执行的操作。在下面的提交函数(第4个)中,我想确定表单是否有文件输入并使用ajax提交,还是只使用常规表单提交而不使用ajax。换句话说,如果表单已上载,请定期提交 我在下面的提交函数中写下了这个问题。这是我唯一需要做的事情 谢谢大家!JQuery从提交函数内部提交表单,jquery,form-submit,Jquery,Form Submit,下面是我想在JQuery脚本中执行的操作。在下面的提交函数(第4个)中,我想确定表单是否有文件输入并使用ajax提交,还是只使用常规表单提交而不使用ajax。换句话说,如果表单已上载,请定期提交 我在下面的提交函数中写下了这个问题。这是我唯一需要做的事情 谢谢大家! function FindFileInput(){ // check for file input var FileInput = $('input:file'); if(FileInput.length >
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???
}
}
});
如果您希望继续提交,请不要阻止默认行为并返回true
$(myForm).submit(function(e){
if(!FindFileInput()){
if(validation()){
//AJAX method
}
}else{
if(validation()){
return true;
}
}
e.preventDefault();
return false;
});
不要过早调用
e.preventDefault()
,只有当您确实想阻止表单以默认方式发布时才调用它(因此,当选择文件时)。这样,您就可以去掉第二条if语句,当有文件要发送时,让submitjs函数什么也不做。这样,如果未选择任何文件,则表单将以默认方式发送
$(myForm).submit(function(e){
// 1. if NO file input present
if(FindFileInput() === false){
if(validation() === true){
e.preventDefault();
// Do your AJAX-stuff here
}
}
});
this.submit()
前提是您没有使用类似
演示:
本机
.submit()
不会触发jQuery事件。简单!我删除了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;
}
});
发件人:
现在,当表单提交时,消息将发出警报。这种情况会发生
在实际提交之前,因此我们可以通过
对事件对象调用.preventDefault()或返回false
从我们的处理者那里。当另一个事件发生时,我们可以手动触发该事件
元素被单击:
所以,改变你的逻辑。不要将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;
});
非常感谢。上述建议同样有效,但从编程和学习的角度来看,这更有意义。