2008-10-07 3 views
140

https://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit vous montre comment soumettre un formulaire que vous créez via JavaScript par courrier. Voici mon code modifié.Javascript Post on Formulaire Envoyer une nouvelle fenêtre

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(); 

Ce que je voudrais faire est d'ouvrir les résultats dans une nouvelle fenêtre. Je currentley utilise quelque chose comme ça pour ouvrir une page dans une nouvelle fenêtre:

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

Notez que 'document.body.appendChild (formulaire)' ** est ** nécessaire, voir https: // stackoverflow .com/q/42053775/58241 – benrwb

Répondre

201

Ajouter

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

ou

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

à la définition de votre formulaire.

+0

N'oubliez pas d'ajouter l'attribut id à l'élément de formulaire, sinon cela ne fonctionne pas dans le navigateur Safari même si le bloqueur de popups est désactivé.

Naren

115

Si vous voulez créer et soumettre votre formulaire de Javascript comme il est dans votre question et vous voulez créer la fenêtre pop-up avec des fonctionnalités personnalisées que je propose cette solution (je mets des commentaires au-dessus des lignes i ajoutée):

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 Mieux que la réponse acceptée, puisqu'elle met le résultat dans le popup avec les options voulues par l'OP. – Nicole

+1

Répondu exactement ce qui a été demandé. Merci! –

+0

Ne fonctionne pas pour moi sur IE - il crée une nouvelle fenêtre avec les attributs spécifiés, puis charge les résultats dans une autre nouvelle fenêtre, laissant la fenêtre précédente vide. – mjaggard

1

Je sais cette méthode de base:

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!

+3

c'est avec jquery! il demande de la pureté JS – 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

Ai-je manqué quelque chose, ou avez-vous encore besoin de '.append' la balise close form? – theJollySin

+0

Je pense que c'est incomplet après avoir ajouté le formulaire que vous devriez supprimer pour une meilleure pratique. – ncubica

+0

@theJollySin: En appelant jQuery sur le tag, il se transformera en un véritable élément DOM et sera fermé lorsqu'il sera inséré dans le DOM. –

0

solution de travail pour fenêtre Simplest flux (testé à Chrome):

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