Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery从提交函数内部提交表单_Jquery_Form Submit - Fatal编程技术网

JQuery从提交函数内部提交表单

JQuery从提交函数内部提交表单,jquery,form-submit,Jquery,Form Submit,下面是我想在JQuery脚本中执行的操作。在下面的提交函数(第4个)中,我想确定表单是否有文件输入并使用ajax提交,还是只使用常规表单提交而不使用ajax。换句话说,如果表单已上载,请定期提交 我在下面的提交函数中写下了这个问题。这是我唯一需要做的事情 谢谢大家! function FindFileInput(){ // check for file input var FileInput = $('input:file'); if(FileInput.length >

下面是我想在JQuery脚本中执行的操作。在下面的提交函数(第4个)中,我想确定表单是否有文件输入并使用ajax提交,还是只使用常规表单提交而不使用ajax。换句话说,如果表单已上载,请定期提交

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

谢谢大家!

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;
});

非常感谢。上述建议同样有效,但从编程和学习的角度来看,这更有意义。