Странное поведение атрибута iframe `name`, установленного 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
атрибут пришел и какова его цель?