2008-10-07 76 views
140

https://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit le muestra cómo enviar un formulario que crea a través de JavaScript a través de una publicación. A continuación está mi código modificado.Javascript Publicar en el formulario Enviar abrir una nueva ventana

var form = document.createElement("form"); 
form.setAttribute("method", "post"); 
form.setAttribute("action", "test.jsp"); 

var hiddenField = document.createElement("input");  
hiddenField.setAttribute("name", "id"); 
hiddenField.setAttribute("value", "bob"); 
form.appendChild(hiddenField); 
document.body.appendChild(form); // Not entirely sure if this is necessary   
form.submit(); 

Lo que me gustaría hacer es abrir los resultados en una nueva ventana. Estoy currentley usando algo como esto para abrir una página en una nueva ventana:

onclick=window.open(test.html,'','scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no'); 
+0

Nota que 'document.body.appendChild (forma)' ** es ** necesario, ver https: // stackoverflow .com/q/42053775/58241 – benrwb

Respuesta

201

Añadir

<form target="_blank" ...></form> 

o

form.setAttribute("target", "_blank"); 

a la definición de su forma.

+0

Recuerde agregar el identificador de atributo al elemento de formulario, de lo contrario, esto no funciona en el navegador Safari aunque el bloqueador de pop-ups esté desactivado.

Naren

115

Si desea crear y enviar su formulario de Javascript como está en su pregunta y desea crear ventana emergente con características personalizadas propongo esta solución (pongo los comentarios por encima de las líneas añadí):

var form = document.createElement("form"); 
form.setAttribute("method", "post"); 
form.setAttribute("action", "test.jsp"); 

// setting form target to a window named 'formresult' 
form.setAttribute("target", "formresult"); 

var hiddenField = document.createElement("input");    
hiddenField.setAttribute("name", "id"); 
hiddenField.setAttribute("value", "bob"); 
form.appendChild(hiddenField); 
document.body.appendChild(form); 

// creating the 'formresult' window with custom features prior to submitting the form 
window.open('test.html', 'formresult', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no'); 

form.submit(); 
+17

+1 Mejor que la respuesta aceptada, ya que en realidad coloca el resultado en la ventana emergente con las opciones que OP deseaba. – Nicole

+1

Respondió exactamente lo que se le preguntó. ¡Gracias! –

+0

No funciona para mí en IE: crea una nueva ventana con los atributos especificados y luego carga los resultados en otra ventana nueva, dejando la ventana anterior vacía. – mjaggard

1

sé que este método básico:

1)

<input type=”image” src=”submit.png”> (in any place) 

2)

<form name=”print”> 
<input type=”hidden” name=”a” value=”<?= $a ?>”> 
<input type=”hidden” name=”b” value=”<?= $b ?>”> 
<input type=”hidden” name=”c” value=”<?= $c ?>”> 
</form> 

3)

<script> 
$(‘#submit’).click(function(){ 
    open(”,”results”); 
    with(document.print) 
    { 
     method = “POST”; 
     action = “results.php”; 
     target = “results”; 
     submit(); 
    } 
}); 
</script> 

Works! solución

+3

eso es con jquery! él pregunta por JS puro – Aviatrix

6
var urlAction = 'whatever.php'; 
var data = {param1:'value1'}; 

var $form = $('<form target="_blank" method="POST" action="' + urlAction + '">'); 
$.each(data, function(k,v){ 
    $form.append('<input type="hidden" name="' + k + '" value="' + v + '">'); 
}); 
$form.submit(); 
+0

¿Me falta algo, o todavía necesitas '.append' la etiqueta de formulario cerrado? – theJollySin

+0

Creo que esto es incompleto después de anexar el formulario, debe eliminarlo para una mejor práctica. – ncubica

+0

@theJollySin: Al llamar a jQuery en la etiqueta, se convertirá en un elemento DOM real y se cerrará cuando se inserte en el DOM. –

0

más simple de trabajo para la ventana de flujo (probado en Chrome):

<form action='...' method=post target="result" onsubmit="window.open('','result','width=800,height=400');"> 
    <input name=".."> 
    .... 
</form> 
Cuestiones relacionadas