Странное поведение iframe 'называет' признак установленным jQuery в IE

Я делаю закачку файла стиля 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 признак прибывает из & какова его цель?
10
задан Alconja 20 January 2010 в 23:20
поделиться

3 ответа

ошибка в IE (конечно, нет!?!)

Трудно поверить, я знаю, но вот мы.

Исторически (*),установка атрибута name вызывает много проблем в IE. Он имеет тенденцию держаться только частично. Например, для имен полей формы это не влияет на поиск form.elements [name] , как должно. Похоже, это еще один случай, когда установка свойства name ненадежна.

Хотя jQuery пытается обойти подобные ошибки браузера, он не улавливает все, и нет известного способа решить эту проблему полностью.

(*: в IE до 7. Если вы запускаете IE8 в собственном режиме documentMode с использованием стандартного режима doctype и, если необходимо, заголовка / мета X-UA-Compatible, обе эти ошибки не возникают.)

submitName , появляющееся в инструментах разработчика, представляет собой интересную возможность заглянуть за кулисы ошибки IE, поскольку она вообще не отображается в общедоступной DOM. То же самое происходит при просмотре элемента или

, атрибут name которого также был записан после создания.

Таким образом, похоже, что происходит то, что IE-up-to-7 перенаправляет все использование атрибутов с именем name на невидимое в противном случае свойство с внутренним именем submitName , которое для поля формы изменяют данные, которые поле будет генерировать как часть отправки формы, но не меняет реальный атрибут name , используемый для индексации HTMLCollection, радио-группировки, getElementsByName или, в случае [ i] кадры, прицеливание.

16
ответ дан 3 December 2019 в 17:58
поделиться

Вы видели улучшения создания разметки в jQuery 1.4?

, если вы обнаружите, что Противно, попробуй это:

$('<iframe />',
{
   name: frameName,
   src: 'about:blank'
}).appendTo("body");
0
ответ дан 3 December 2019 в 17:58
поделиться

Это не просто проблема jQuery, при настройке вручную она тоже случается.

Если для его установки используется метод setAttribute (), даже без jQuery, он делает то же самое, когда форма или iframe только что были созданы! Таким же образом, используя innerHTML, вы можете исправить это ... да, еще раз, это Microsoft разрушает мой день: /

2
ответ дан 3 December 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: