【问题标题】:Onsubmit event after javascript form submitjavascript表单提交后的onsubmit事件
【发布时间】:2015-11-27 20:05:17
【问题描述】:

我有一个上传文件表单,当它被选中时我尝试上传文件,所以我尝试了这样的事情:

<form enctype="multipart/form-data" method="POST" onsubmit="return
UploadFile(this);">                                 
<input id="upfile" type="file" onchange="this.form.submit();"/>
</form>

form.submit() 有效,但当然我需要在提交时进行一些验证,所以我尝试运行一个函数:

 function UploadFile(file){
       alert('Bleah');
       return false;
    }

在正常情况下它应该返回false,并且表单不应该重新加载页面,但这不会发生。

如果我在表单中添加提交输入,它会按预期工作:

<form enctype="multipart/form-data" method="POST" onsubmit="return
UploadFile(this);">
<input type="submit" name="upload" value="Upload">                                  
<input id="upfile" type="file"/>
</form>

谁能解释一下这是怎么回事?

【问题讨论】:

  • 试试onchange="return this.form.submit();"
  • @JaromandaX ,不工作......同样的行为
  • 您打算如何提交表单?
  • 如果您需要对提交进行一些验证,那么为什么要在选择文件后提交表单?
  • 试试这个。 &lt;input id="upfile" type="file" onchange="return UploadFile(this.form);"/&gt;

标签: javascript php jquery forms file


【解决方案1】:

试试这个:

function UploadFile(file) {
  if (file.value === '') {
    alert("Invalid File");
  } else {
    alert('Form will be submitted now!');
    document.getElementById('myForm').submit();
  }
}
<form enctype="multipart/form-data" method="POST" id="myForm">
  <input id="upfile" name="upfile" type="file" onchange="UploadFile(this);" />
</form>

【讨论】:

    【解决方案2】:

    要在文件被选中时上传文件,您必须在 input 更改而不是 form 更改标记上调用 UploadFile() 函数。如果您提交输入更改,则页面将重新加载。 所以,你最好使用这样的东西:

    $('#upfile').onchange(function(){
       if(UploadFile(this.parent('form'))){
       this.parent('form').submit();
    }
    })
    

    您将不再需要标签中的onchangeonsubmit

    【讨论】:

      【解决方案3】:

      解决方案:

      <form id="formname" enctype="multipart/form-data" method="POST" action="test.html">
      <input id="upfile" type="file" onchange="sendForm()"/>
      </form>
      
      <script>
        function sendForm() {
          var field = document.getElementById("upfile");
          if (field) {
            console.log("the is a file and the form will be sent");
            document.forms["formname"].submit();
          }
      
        }
      
      </script>
      

      老-- 我不明白,你想如何提交没有提交按钮的表单?或者至少,在 javascript "object.addEventListener("keydown", myScript);" 中处理提交

      -- 好的,我又读了一遍,我明白了这个问题

      您需要在 javascript 上处理此问题并检测文件的选择。看看这个帖子:

      how to check if a file is selected using javascript?

      【讨论】:

      • 好吧,this.form.submit() 有一个 onchange 事件,不应该作为提交按钮工作吗?
      • 考虑如果你需要验证,那就是答案,你验证字段有一个值 != '' 然后你可以提交它
      • 我会用纯 JavaScript 试试
      • 我试图实现的是一种更快、更流畅的文件上传方式,一旦文件被选中,它应该上传文件(提交表单),在提交时运行验证,然后返回一个布尔值,取决于文件是否可以上传,你给我的线程,我不能这样做......
      • @Cynthia Sanchez,为了纠正你,field 将始终返回 id="upfile" 的 DOM 对象,因此它永远不会是错误的。您需要检查输入的值。为了澄清,在 if 条件之前尝试 ~console.log(field)`。