我有一个问题,我的表单适用于所有浏览器,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();
,但我也没有运气。没有回发。
任何人都有任何线索如何解决这个问题?
答案 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();
});