srcdoc dinamico javascript forms iframe

dinamico - Problema de IE: envío de formulario a un iframe con javascript



javascript href iframe (4)

Bienvenido a SO.

Un problema que vi en su código es que en realidad nunca muestra el iframe. Para que aparezca en la página, debe insertarlo en su documento. En mi ejemplo, creo una etiqueta <span> para que actúe como la ranura donde se insertará el iframe.

Vea si esto hace lo que está buscando.

<!-- 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>

ACTUALIZAR:

Descubrí que esta solución solo funciona en Firefox. Así que hice algo de experimentación. Parece que si defines el iframe en el html (en lugar de generarlo a través de JS / DOM) entonces funciona. Aquí está la versión que funciona con IE y 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>

Estaba intentando crear un elemento iframe usando javascript, así:

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

Sin embargo, cuando traté de enviar un formulario usando el iframe recién creado como objetivo, IE abre una nueva ventana, en lugar de usar el iframe.

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

Esto funciona perfectamente en Firefox. Además, el iframe se crea, pero no se usa.


Has golpeado un error en Internet Explorer .

NO PUEDE establecer el atributo de nombre de CUALQUIER elemento en IE utilizando el método DOM estándar .setAttribute(''name'', value);

En IE (antes de la versión 8 ejecutándose en el modo de estándares IE8), este método no funcionará para establecer el atributo de nombre.

Necesitas usar uno de los siguientes:

//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 (e.g. 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'');


Para continuar la respuesta de @ scunliffe, si usa Prototype.js:

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

que funciona porque esta función auxiliar detecta HAS_EXTENDED_CREATE_ELEMENT_SYNTAX para IE, trabajando alrededor del error .name = …


function sendForm(idform){ var nfi = "RunF"+tagRandom(); $("body").append("<iframe name=/""+nfi+"/" id=/""+nfi+"/" class=/"runAgents/" src=/"#/"></iframe>"); $("#"+idform).attr("target",nfi); $("#"+idform).submit(); }