Comportamento estranho do atributo iframe `name` definido pelo jQuery no IE
Estou fazendo um upload de arquivo no estilo ajax postando o arquivo em um formulário em um iframe e percebi algum comportamento estranho no IE (parece acontecer nos 6 e 8). Basicamente, no IE, o formulário nãotarget
o iframe corretamente para que a resposta apareça em uma nova janela (em vez de no iframe). Você pode reproduzir o problema com o seguinte conjunto mínimo de 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>
Agora (antes de você postar uma resposta), fiz uma investigação (usando as ferramentas de desenvolvedor do IE8) e parece que o.attr("name", frameName)
está realmente adicionando o atributo comosubmitName="myFrame"
em vez de simplesmentename="myFrame"
. Com base nisso, resolvi o problema alterando o código de criação de iframe para o mais desagradável:
var $iframe = $("<iframe src=\"about:blank\" name=\"" + frameName + "\" />")
.appendTo("body");
Ao fazer essa alteração, o formulário é postado no iframe, conforme desejado.
Minhas perguntas são:
Por que não.attr("name", ...)
trabalhar como esperado?É um bug no jQuery, um bug no IE (com certeza não!?!), Ou estou perdendo algo óbvio?Onde é que osubmitName
atributo vem e qual é o seu propósito?