【发布时间】:2010-01-20 23:20:49
【问题描述】:
我正在上传 ajax 样式文件,方法是将文件以表单形式发布到 iframe,并注意到 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>
现在(在您发布答案之前),我进行了一些调查(使用 IE8 的开发人员工具),似乎 .attr("name", frameName) 实际上将属性添加为 submitName="myFrame" 而不是简单的 name="myFrame"。基于此,我通过将 iframe 创建代码更改为稍微糟糕的方式解决了这个问题:
var $iframe = $("<iframe src=\"about:blank\" name=\"" + frameName + "\" />")
.appendTo("body");
进行此更改会使表单根据需要发布到 iframe 中。
我的问题是:
- 为什么
.attr("name", ...)没有按预期工作? - 这是 jQuery 中的错误,IE 中的错误(肯定不是!?!),还是我遗漏了一些明显的东西?
-
submitName属性来自哪里以及它的用途是什么?
【问题讨论】:
标签: jquery internet-explorer forms iframe