style Javascript Submit non include il valore del pulsante Submit




html input (6)

Sì, questo è il comportamento corretto di HTMLFormElement.submit()

Il motivo per cui il valore del pulsante di invio non viene inviato è perché i moduli HTML sono progettati in modo che inviino il valore del pulsante di invio su cui è stato fatto clic (o attivato in altro modo). Ciò consente più pulsanti di invio per modulo, ad esempio uno scenario in cui si desidera sia l'azione "Anteprima" che quella "Salva".

Poiché si invia il modulo al livello di programmazione, non esiste alcuna azione esplicita dell'utente su un singolo pulsante di invio, quindi non viene inviato nulla.

Ok, questa è meno una domanda che non è solo per le mie informazioni (perché posso pensare a 4 diversi work around che lo faranno funzionare, ma ho un modulo (niente di troppo speciale) ma il pulsante di invio ha un valore specifico associato ad esso.

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

E quando il modulo viene inviato, controllo quel nome.

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

Tuttavia, c'è una volta in cui sto cercando di inviare il modulo tramite Javascript, piuttosto che il pulsante di invio.

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

Che funziona bene, tranne 1 problema. Quando guardo i valori $ _POST inviati tramite il metodo javascript, non include il submitDocUpdate. Ricevo tutti gli altri valori del modulo, ma non il valore del pulsante di invio.

Come ho detto, posso pensare ad alcuni modi per aggirarlo (usando una variabile nascosta, controllare isset su un'altra variabile di forma, ecc.) Ma mi chiedo solo se questo è il comportamento corretto di submit () perché sembra meno -intuitivo per me. Grazie in anticipo.


Perché non usare il seguente invece?

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

Ecco un'idea che funziona bene su tutti i browser senza alcuna libreria esterna.

Codice HTML

<form id="form1" method="post" >
    ...........Form elements...............
    <input type='button' value='Save' onclick="manualSubmission('form1', 'name_of_button', 'value_of_button')" />
</form>

Script Java

Metti questo codice solo prima di chiudere il tag del corpo

<script type="text/javascript">
    function manualSubmission(f1, n1, v1){
    var form_f = document.getElementById(f1);
    var fld_n = document.createElement("input");
    fld_n.setAttribute("type", "hidden");
    fld_n.setAttribute("name", n1);
    fld_n.setAttribute("value", v1);
    form_f.appendChild(fld_n);
    form_f.submit();
}
</script>

Codice PHP

<?php if(isset($_POST['name_of_button'])){

       // Do what you want to do.
}
?>

Nota: non nominare il pulsante "invia" in quanto potrebbe causare l'incompatibilità del browser.


Sebbene la risposta accettata sia tecnicamente corretta. C'è un modo per portare il valore che desideri assegnare. Infatti quando il da è inviato al server il valore del pulsante di invio è associato al nome che hai dato al pulsante di invio. È così che funziona il trucco di Marcin e ci sono molti modi in cui puoi farlo a seconda di ciò che usi. Ex. in jQuery potresti passare

data: { 
    submitDocUpdate = "MyValue" 
}

in MVC vorrei usare:

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

Questo è in realtà il modo in cui ho rispettato il requisito del vapore di utilizzare la propria immagine come collegamento di accesso usando 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>
}

Il valore del pulsante di invio viene inviato quando l'utente fa clic sul pulsante. La chiamata a form.submit () non fa clic sul pulsante. Potresti avere più pulsanti di invio e la funzione form.submit () non ha modo di sapere quale vuoi inviare al server.


Capire il comportamento è buono, ma ecco una risposta con un codice che risolveva il mio problema in jquery e php, che altri potevano adattare. In realtà questo viene rimosso da un sistema più complesso che mostra una conferma modale di bootstrap quando si fa clic sul pulsante Elimina.

TL; DR Hai un input vestito come un pulsante. Al clic, modificalo in un hidden input .

html

<input
    id="delete" 
    name="delete" 
    type="button" 
    class="btn btn-danger"
    data-confirm="Are you sure you want to delete?"
    value="Delete"></input>

jquery

$('#delete').click(function(ev) {
        button.attr('type', 'hidden');
        $('#form1').submit();
    return false;
});

php

if(isset($_POST["delete"])){
    $result = $foo->Delete();    
}






form-submit