Dziwne zachowanie atrybutu iframe `name` ustawionego przez jQuery w IE
Robię przesyłanie plików w stylu ajax, wysyłając plik w formie do iframe i zauważyłem dziwne zachowanie w IE (wydaje się, że dzieje się zarówno w 6, jak i 8). Zasadniczo w IE formularz nietarget
iframe poprawnie, więc odpowiedź pojawia się w nowym oknie (zamiast w iframe). Możesz odtworzyć problem za pomocą następującego minimalnego zestawu 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>
Teraz (zanim napiszesz odpowiedź), przeprowadziłem pewne dochodzenie (używając narzędzi programistycznych IE8) i wygląda na to, że.attr("name", frameName)
faktycznie dodaje atrybut jakosubmitName="myFrame"
zamiast po prostuname="myFrame"
. Na tej podstawie rozwiązałem problem, zmieniając kod tworzenia iframe na nieco gorszy:
var $iframe = $("<iframe src=\"about:blank\" name=\"" + frameName + "\" />")
.appendTo("body");
Dokonanie tej zmiany powoduje, że formularz jest wysyłany do ramki iframe zgodnie z potrzebami.
Moje pytania są:
Dlaczego nie.attr("name", ...)
działa zgodnie z oczekiwaniami?Czy jest to błąd w jQuery, błąd w IE (na pewno nie!?!), Czy też brakuje mi czegoś oczywistego?Gdzie jestsubmitName
atrybut pochodzi i jaki jest jego cel?