IE问题:使用JavaScript将表单提交给iframe

我正在尝试使用JavaScript创buildiframe元素,如下所示:

var iframe = document.createElement('iframe'); iframe.setAttribute('name', 'frame_x'); 

但是,当我尝试使用新创build的iframe作为目标提交表单时,IE会打开一个新窗口,而不是使用iframe。

 form.setAttribute('target', 'frame_x'); form.submit(); 

这在Firefox中完美工作。 此外,iframe被创build,但不被使用。

在Internet Explorer中遇到了一个错误

不能在IE中使用标准的DOM方法.setAttribute('name', value);设置任何元素的name属性.setAttribute('name', value);

在IE中(在IE8标准模式下运行的版本8之前),这个方法不能设置name属性。

您需要使用下列之一:

 //A (any browser) var iframe = document.createElement('iframe'); iframe.name = 'frame_x'; //B (only in IE) var iframe = document.createElement('<iframe name="frame_x"/>'); //C (use a JS library that fixes the bug (eg jQuery)) var iframe = $('<iframe name="frame_x"></iframe>'); //D (using jQuery to set the attribute on an existing element) $('iframe:first').attr('name','frame_x'); 

欢迎来到SO。

我在代码中看到的一个问题是,您实际上从来没有显示过iframe。 为了使其出现在页面上,您必须将其插入到您的文档中。 在我的例子中,我创build了一个<span>标签作为插入iframe的插槽。

看看这是否是你要找的。

 <!-- http://stackoverflow.com/questions/2181385/ie-issue-submitting-form-to-an-iframe-using-javascript --> <html> <head> <script type="text/javascript"> function submitFormToIFrame(){ var form=document.getElementById('myform'); form.setAttribute('target', 'frame_x'); form.submit(); } </script> </head> <body> <h1>Hello Erwin!</h1> <form id="myform" name="myform" action="result.html"> <input type="button" value="Submit the Form" onClick="submitFormToIFrame();"> </form> <span id="iframeSlot"> <script type="text/javascript"> var iframe = document.createElement('iframe'); iframe.setAttribute('name', 'frame_x'); document.getElementById('iframeSlot').appendChild(iframe); </script> </span> </body> </html> 

更新:

我发现这个解决scheme只适用于Firefox。 所以我做了一些实验。 看来,如果你在html中定义iframe(而不是通过JS / DOM生成),那么它的工作原理。 以下是适用于IE和Firefox的版本:

 <html> <head> <script type="text/javascript"> function submitFormToIFrame(){ //IE if( document.myform ){ document.myform.setAttribute('target','frame_x'); document.myform.submit(); //FF } else { var form=document.getElementById('myform'); form.setAttribute('target', 'frame_x'); form.submit(); } } </script> </head> <body> <h1>Hello Erwin!</h1> <form id="myform" name="myform" action="result.html" target=""> <input type="button" value="Submit the Form" onClick="submitFormToIFrame();"> </form> <span id="iframeSlot"> <iframe name="frame_x"> </iframe> </span> </body> </html> 
 function sendForm(idform){ var nfi = "RunF"+tagRandom(); $("body").append("<iframe name=\""+nfi+"\" id=\""+nfi+"\" class=\"runAgents\" src=\"#\"></iframe>"); $("#"+idform).attr("target",nfi); $("#"+idform).submit(); } 

要继续@ scunliffe的答案,如果使用Prototype.js:

 var iframe = Element('iframe', {name: 'frame_x'}); 

这是因为这个辅助函数检测到HAS_EXTENDED_CREATE_ELEMENT_SYNTAX为IE,解决.name = …错误。