如果我在提交按钮上放置脚本,Internet Explorer将不会回发表单

时间:2012-02-08 13:58:03

标签: jquery forms internet-explorer

我有一个问题,我的表单适用于所有浏览器,IE除外。

我已将问题减少到仍然存在问题的最小问题。

我创建了一个如下所示的测试html文件:

<html>
  <body>
    <form id="myform" action="/" method="post" enctype="multipart/form-data">
      <input id="fileToUpload" type="file" size="10" name="fileToUpload" />
      <input id="mysubmit" type="submit" value="submit"/>
    </form>
    <script src="jquery-1.5.1.js" type="text/javascript"></script>
    <script type="text/javascript">
      $( function(){
       *$("#mysubmit").click(function(){
         *$("#fileToUpload").click();
       *});
      });
    </script>
  </body>
</html>

我在这里要做的是先让提交按钮打开文件选择框,然后提交表单。原因是我想隐藏文件选择器,以便用户可以单击按钮,从对话框中选择文件,然后立即回传表单。

在“现实生活中”它有点复杂,因为Firefox和Chrome不会在$("#fileToUpload").click();之后继续脚本之前等待文件选择对话框关闭,并且Internet Explorer会在继续之前等待它关闭。但那些我能设法处理的事情。

但在这种情况下,IE根本不执行表单的回发。如果我删除上面带有前缀为星号的行,IE也会将其发回。我也尝试在那里放一个$("#myform").submit();,但我也没有运气。没有回发。

任何人都有任何线索如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为这是不可能的,我在这里玩了它:http://jsfiddle.net/K35tB/5/还使用计时器检查fileToUpload是否包含某些内容,然后尝试触发回发。发生的事情是我收到消息“Access deny”如果我在触发FileToUload后进行回发。如果我之前执行回发,它的工作原理。所以它在某种程度上相关。

   $("#mysubmit").click(function(){
      document.getElementById("fileToUpload").click();
      document.forms["myform"].submit(); // JavaScript error, No permission / Access denied (Åtkomst nekas in Swedish ;-))
   });

但当然这段代码工作

document.forms["myform"].submit();

我正在玩IE 8.0.7 如果您检查小提琴示例并修改它并运行计时器版本,您将看到该路径在一段时间内可见,并且当我们执行提交它的消息时。

也许你应该尝试使用http://swfupload.org/或其他一些组件做同样的事情。如果它不是您项目中使用纯HTML控件的要求。希望它有所帮助!

编辑1: 我尝试了更多示例,如果将fileToUpload放在form标签之外,它的工作正确。因此,我认为这是某种安全问题。我还尝试将fileToUpload放在表单之外,然后在回发之前修改DOM并将其插入表单中。同样的结果,访问被拒绝......

答案 1 :(得分:1)

可能你可以使用它,只是核心思想,你必须把它放在准备好的功能

$("fileToUpload").change(function (){
   $('#fileToUpload').submit();
 });