Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IE中jQuery设置的iframe`name`属性的奇怪行为_Jquery_Internet Explorer_Forms_Iframe - Fatal编程技术网

IE中jQuery设置的iframe`name`属性的奇怪行为

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来上传ajax风格的文件,并注意到IE中的一些奇怪行为(似乎在6和8中都会发生)。基本上,在IE中,表单不会正确地
瞄准
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' />")