IE中jQuery设置的iframe`name`属性的奇怪行为
我正在通过将文件以表单形式发布到iframe来上传ajax风格的文件,并注意到IE中的一些奇怪行为(似乎在6和8中都会发生)。基本上,在IE中,表单不会正确地IE中jQuery设置的iframe`name`属性的奇怪行为,jquery,internet-explorer,forms,iframe,Jquery,Internet Explorer,Forms,Iframe,我正在通过将文件以表单形式发布到iframe来上传ajax风格的文件,并注意到IE中的一些奇怪行为(似乎在6和8中都会发生)。基本上,在IE中,表单不会正确地瞄准iframe,因此响应会出现在新窗口中(而不是iframe中)。您可以使用以下最小的HTML/JS集重现问题: <html> <head> <script src="http://code.jquery.com/jquery-1.3.2.js"></script> <scri
瞄准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>
进行此更改将根据需要将表单发布到iframe中
我的问题是:
- 为什么
.attr(“name”,…)
不能按预期工作
- 这是jQuery中的一个bug,IE中的一个bug(当然不是!?!),还是我遗漏了一些明显的东西
submitName
属性从何而来&它的用途是什么
您看过jQuery 1.4中的吗
如果你觉得很恶心,试试这个:
$('<iframe />',
{
name: frameName,
src: 'about:blank'
}).appendTo("body");
$(“”,
{
名称:frameName,
src:“关于:空白”
}).附于(“主体”);
IE中的一个bug(当然不是!)
很难相信,我知道,但我们在那里
从历史上看(*),设置name
属性在IE中有很多问题。它往往只能部分保持。例如,在表单字段名上,它不会像应该的那样影响form.elements[name]
查找。这似乎是另一种设置名称
属性不可靠的情况
虽然jQuery试图解决类似这样的浏览器错误,但它并不能捕获所有错误,而且还没有完全解决问题的已知方法
(*:在IE高达7中。如果您使用标准模式doctype在本机文档模式下运行IE8,并且如果需要使用与X-UA兼容的头/元,则不会出现这两个错误。)
dev工具中出现的submitName
是IE bug幕后有趣的一瞥,因为它根本不出现在公开可见的DOM中。如果您查看一个
元素或
其name
属性在创建后也已写入,则会执行相同的操作
因此,IE-up-7将所有名为name
的属性的使用重定向到一个不可见的属性,内部称为submitName
,该属性用于表单字段更改字段将作为表单提交的一部分生成的数据,但这并不会改变用于HTMLCollection索引、无线分组、getElementsByName或(对于[i]帧)目标的真实名称属性。这不仅仅是一个jQuery问题,当手动设置时,它也会发生
如果使用setAttribute()方法进行设置,即使没有jQuery,也会在刚创建表单或iframe时执行相同的操作!
同样,使用innerHTML可以修复它。。。是的,再一次,是微软摧毁了我的一天://创建了这样的元素
$("<iframe name='frameName' />")
$(“”)
为我解决了这个问题没有任何区别:从新的{attrs}
对象设置名称
失败的方式与使用attr()
设置它失败的方式相同。遗憾的是,标记改进仍然值得展示+1 bobinceYeah我已经看到了新的语法(本项目坚持使用1.3.2),但这实际上并没有回答我的问题。。。使用新语法和1.4版本仍然存在问题(我相信您编写的内容实际上相当于我原来的.attr(“name”,frameName)
)。同意,这是对您“通过将iframe创建代码更改为稍微糟糕的代码来解决问题”的回应。感谢您的背景,我想这是我将要得到的一个明确的答案,没有任何前IE开发者的帖子(尽管我无法想象他们承认事实:P),所以我接受它。很高兴知道,如果你有正确的doctype,至少在IE8中,这个bug确实消失了。getElementsByName
,无线电分组等等似乎都在工作,即使name
属性保持不变,只有submitName
属性改变——你有没有遇到过你提到的问题?我在ie8的ie7兼容模式下测试了这一点,似乎一切都正常。更多信息:为了增加混淆,在IE getElementById('foo')中,还获取了具有name=“bar”submitName=“foo”
X的元素-(
$("<iframe name='frameName' />")