Robię ładowanie pliku w stylu ajax przez umieszczenie pliku w formularzu w elemencie iframe i zauważyłem pewne dziwne zachowanie w IE (zdaje się, że dzieje się to zarówno w 6 & 8). Zasadniczo w IE formularz nie jest poprawny iframe, więc odpowiedź pojawia się w nowym oknie (zamiast w iframe). Można odtworzyć problem z następującym minimalnym zestawem HTML/JS:Dziwne zachowanie atrybutu iframe `name` ustawionego przez jQuery w IE
<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 (przed wysłaniem odpowiedzi), zrobiłem kilka badań (za pomocą narzędzi programistycznych IE8) i wydaje się, że .attr("name", frameName)
faktycznie dodanie atrybut jako submitName="myFrame"
zamiast po prostu name="myFrame"
. W oparciu o to, jak rozwiązać ten problem przez zmianę kodu do tworzenia iframe lekko nastier:
var $iframe = $("<iframe src=\"about:blank\" name=\"" + frameName + "\" />")
.appendTo("body");
Dokonanie tej zmiany sprawia, że słupek formy w iframe jako pożądane.
Moje pytania są:
- Dlaczego nie
.attr("name", ...)
działa zgodnie z oczekiwaniami? - Czy to błąd w jQuery, błąd w IE (na pewno nie!?!), Czy też brakuje mi czegoś oczywistego?
- Gdzie jest atrybut
submitName
pochodzący z & jaki jest jego cel?
Dzięki za tło, myślę, że jest to ostateczna odpowiedź, jaką mam zamiar uzyskać, odrzucając wszelkie zamieszczane przez byłych programistów IE (choć nie mogę sobie wyobrazić, że przyznają się do tego faktu: P), więc akceptuję to. Miło wiedzieć, że przynajmniej błąd rzeczywiście znika w IE8, jeśli masz właściwy doctype w miejscu. – Alconja
'getElementsByName', radio-grupowanie i tak dalej działają, mimo że atrybuty' name' pozostają takie same i zmieniają się tylko atrybuty 'submitName'" - czy napotkaliście jakieś problemy z rzeczami, które wymieniliście? Testowałem to w ie7 trybie zgodności w ie8, i wszystko wydawało się działać. – cic
Trochę więcej informacji: http://thunderguy.com/semicolon/2005/05/23/setting-nazwa-nazwisko-in-internet-explorer/ – cic