2009-05-17 5 views
4

私は動的に挿入された隠れたiframeにフォームを投稿しようとしていますが、Internet Explorerではフォームの送信が新しいウィンドウで開きます。Internet Explorerは、動的に挿入されたiframeではなく、新しいウィンドウでフォーム提出を開くのはなぜですか?

var iframe = document.createElement('iframe'); 
iframe.name = 'hidden_iframe'; 
iframe.className = 'NotVisible'; 
iframe.id = 'hidden_iframe'; 
document.body.appendChild(iframe); 

var my_form = document.getElementById('my_form'); 
my_form.target = 'hidden_iframe'; 

Firefoxでは動作しますが、インターネット では動作しません。

答えて

13

明らかに、createElementの呼び出しで名前を含める必要があります。これはIEで動作し、標準に準拠したブラウザでは例外が発生します。我々が得る:

var iframe; 
try { 
    iframe = document.createElement('<iframe name="hidden_iframe">'); 
} catch (ex) { 
    iframe = document.createElement('iframe'); 
    iframe.name='hidden_iframe'; 
} 

iframe.className = 'NotVisible'; 
iframe.id = 'hidden_iframe'; 
document.body.appendChild(iframe); 

var my_form = document.getElementById('my_form'); 
my_form.target = 'hidden_iframe'; 
+0

+1これはIEでひどいものを見つけるためです。 IEのどのバージョン? 6? 7? 8? – scraimer

+0

IE 6と7には必須です。IE 8はいずれの方法でも動作します。 – lambacck

+0

偉大な修正は、それを考えなかったでしょう。私はIEのために考えることができる最も直感的なことをしている必要があります。 – brad

0

が、これは、より簡単にAjax提出を用いて達成することができませんでしたか?あなたが提示しているiframeのアプローチは、非常にハックされ、多くの問題になりがちです。

jQuery Form pluginはフォームの値のシリアル化をすべて処理することでAjaxの送信を容易にします。

+0

結果のHTMLドキュメントの一部を取得する必要があります。また、私はあなたのJQueryフォームプラグインがファイルアップロード(これは、提示されたテクニックを使用するための主な議論です)のために動作するとは思わない。 – lambacck

+0

jQueryフォームは、フォームにファイルが入力されたときに、その場でIFRAMEを使用するため、ファイルのアップロードに使用できます。 – Sam

+0

興味深い。そのような場合でも、JQuery Formsは複数のブラウザですぐに動作します。第2に、送信前と送信後の両方のコールバックを指定できるため、送信時にhtml ajax応答を返すことができます。 – Soviut