我正在通过将表单中的文件发布到iframe来进行ajax样式文件上传,并注意到IE中的一些奇怪的行为(似乎发生在6和8中).基本上在IE中,表单不target适合iframe,因此响应出现在新窗口中(而不是iframe中).您可以使用以下最小的HTML/JS集重现该问题:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.3.2.js"></script>
<script>
$(document).ready(function(){
var frameName = "myFrame";
var $iframe = $("<iframe src=\"about:blank\" />")
.attr("name", frameName)
.appendTo("body");
var $uploadForm = $("<form action=\"http://www.google.com/search\" />")
.attr("target", frameName)
.append("<input type=\"text\" name=\"q\" />")
.append("<input type=\"submit\" />")
.appendTo("body");
});
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
现在(在你发布答案之前),我做了一些调查(使用IE8的开发人员工具),看起来.attr("name", frameName)实际上是在添加属性submitName="myFrame"而不是简单name="myFrame".基于此,我通过将iframe创建代码更改为稍微麻烦来解决了这个问题:
var $iframe = $("<iframe src=\"about:blank\" name=\"" + frameName + "\" />")
.appendTo("body");
Run Code Online (Sandbox Code Playgroud)
进行此更改会使表单根据需要发布到iframe中.
我的问题是:
.attr("name", ...)按预期工作?submitName属性来自何处及其目的是什么?