2009-11-10 5 views
20

Ok, c'est moins une question que c'est juste pour mon information (parce que je peux penser à environ 4 différentes façons de le faire fonctionner.) Mais j'ai une forme (rien trop spéciale) mais le bouton soumettre a une valeur spécifique qui lui est associée.Javascript Soumettre ne comprend pas Soumettre Valeur du bouton

<input type='submit' name='submitDocUpdate' value='Save'/> 

Et lorsque le formulaire est soumis je vérifie ce nom.

if(isset($_POST['submitDocUpdate'])){ //do stuff 

Cependant, il y a un moment où je J'essaie de soumettre le formulaire via Javascript, plutôt que par le bouton de soumission

document.getElementById("myForm").submit(); 

Ce qui fonctionne bien, sauf 1 problème. Lorsque je regarde les valeurs $ _POST qui sont soumises via la méthode javascript, cela n'inclut pas submitDocUpdate. J'obtiens toutes les autres valeurs du formulaire, mais pas la valeur du bouton submit. Comme je l'ai dit, je peux penser à quelques façons de contourner cela (en utilisant une variable cachée, vérifier isset sur une autre variable de formulaire, etc.) mais je me demande simplement si c'est le comportement correct de submit() parce que cela me semble moins intuitif. Merci d'avance.

Répondre

26

Oui, c'est le comportement correct de HTMLFormElement.submit()

La raison pour laquelle votre soumettre valeur bouton n'est pas envoyé est parce que les formulaires HTML sont conçus de manière à envoyer la valeur du bouton d'envoi qui a été cliqué (ou autrement activé). Cela permet plusieurs boutons d'envoi par formulaire, comme un scénario dans lequel vous souhaitez à la fois "Aperçu" et "Enregistrer".

Étant donné que vous soumettez le formulaire par programmation, il n'y a pas d'action utilisateur explicite sur un bouton de soumission individuel, donc rien n'est envoyé.

+0

Ah. Cela a du sens. Je n'avais pas considéré le concept de soumission par programmation avec plusieurs boutons de soumission (je n'utilise pas souvent très souvent). Merci vous;) –

+0

ennuyeux. J'utilise '$ form.on ('submit', function() {});' qui est déclenché quand le formulaire est soumis (le bouton est cliqué), mais même cela semble surcharger permettant au bouton de cliquer. J'ai essayé d'utiliser onsubmit parce que onclick faisait en sorte que le formulaire ne soit pas soumis quand je veux juste changer la page pour désactiver les clics sur les boutons, mais cela semble ... désactiver les boutons ... avant de les soumettre au lieu de après ... merci pour votre explication! – Jake

7

Pourquoi ne pas utiliser ce qui suit à la place?

<input type="hidden" name="submitDocUpdate" value="Save" /> 
+0

@Tim Cooper - Et s'il y a plusieurs boutons dans le formulaire? – MarcoZen

1

La valeur du bouton Envoyer est envoyée lorsque l'utilisateur clique sur le bouton. L'appel de formulaire.submit() ne clique pas sur le bouton. Vous pouvez avoir plusieurs boutons d'envoi, et la fonction form.submit() n'a aucun moyen de savoir laquelle vous voulez envoyer au serveur.

9

En utilisant une version de jQuery 1.0 ou plus:

$('input[type="submit"]').click();

En fait, je travaillais dans le même problème quand je suis tombé sur ce poste. click() sans arguments déclenche un événement click sur les éléments que vous sélectionnez: http://api.jquery.com/click/

+0

Astuce très intéressante. Merci. –

1

Bien que la réponse acceptée soit techniquement correcte. Il existe un moyen de conserver la valeur que vous souhaitez attribuer. En fait, lorsque le from est envoyé au serveur, la valeur du bouton submit est associée au nom que vous avez donné au bouton submit. C'est comme ça que le truc de Marcin fonctionne et il y a plusieurs façons de le faire en fonction de ce que vous utilisez. Ex.jQuery vous pouvez passer

data: { 
    submitDocUpdate = "MyValue" 
} 

dans MVC J'utiliserais:

@using (Html.BeginForm("ExternalLogin", "Account", new { submitDocUpdate = "MyValue" })) 

Ceci est en fait la façon dont j'obéis à l'exigence de la vapeur d'utiliser Thier propre image comme lien de connexion à l'aide oAuth:

@using (Html.BeginForm("ExternalLogin", "Account", new { provider = "Steam" }, FormMethod.Post, new { id = "steamLogin" })) 
{ 
    <a id="loginLink" class="steam-login-button" href="javascript:document.getElementById('steamLogin').submit()"><img alt="Sign in through Steam" src="https://steamcommunity-a.akamaihd.net/public/images/signinthroughsteam/sits_01.png"/></a> 
}