jQuery - aggiungi parametri aggiuntivi al momento dell'invio (NON ajax)


206

Usando "submit" di jQuery - c'è un modo per passare parametri aggiuntivi a un modulo? NON sto cercando di farlo con Ajax - questa è una normale, tipica presentazione di aggiornamento.

$('#submit').click(function () {
    $('#event').submit(function () {
        data: { 
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    });
});

Quale tecnologia lato server stai usando?
— Enrique,

Vedi la mia risposta [qui] [1], che si aggiunge a un modulo serializzato prima di inviarlo. [1]: stackoverflow.com/questions/17809056/…
— Jeff Lowery,

Risposte:


371

Questo è stato per me:

var input = $("<input>")
               .attr("type", "hidden")
               .attr("name", "mydata").val("bla");
$('#form1').append(input);

si basa sulla risposta di Daff, ma ha aggiunto l'attributo NAME per mostrarlo nella raccolta moduli e ha cambiato VALUE in VAL. Ho anche verificato l'ID del FORM (nel mio caso form1)

utilizzato il firebug di Firefox per verificare se l'elemento è stato inserito.

Gli elementi nascosti vengono registrati nuovamente nella raccolta moduli, vengono scartati solo i campi di sola lettura.

Michel


46
Come posso cantare 'you are my sunshine' in binario? Grazie mille. Questo risolve tante cose.
— Ciel,

38
Puoi migliorare leggermente la leggibilità: var input = $ ("<input>", {type: "hidden", nome: "mydata", valore: "bla"}); $ ( '# form1') append ($ (input)).;
— Konstantine Kalbazov,

2
$ ("<input>") .attr ("type", "hidden"). attr ("name", "mydata"). val ("bla"). appendTo ('# form1'); è un altro modo
— kiev

6
Mi è piaciuta una combinazione di: $ ("<input>", {tipo: "nascosto", nome: "mydata", valore: "bla"}). AppendTo ("# form1");
— gabeio,

Non esiste un limite alla dimensione dei dati? Ho inviato alcuni oggetti di grandi dimensioni usando JSON.stringify (obj) e questo metodo e sembrava troncato.
— omikron,

26

Nel tuo caso dovrebbe essere sufficiente aggiungere un altro campo nascosto al modulo in modo dinamico.

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));

I dati che devo inviare non sono idonei al modulo. Deve essere acquisito e gestito sul lato server.
— Ciel,

Che cosa intendi con "non capace della forma"?
— Vincent Ramdhanie,

Spiacenti, non ha funzionato affatto. Anche con i soli dati forzati, non li inserisce nel modulo.
— Ciel,

Non può essere inserito in un campo modulo.
— Ciel,

2
Se è una stringa, può essere inserita in un campo modulo
— PetersenDidIt

19

Puoi persino usare questo. ha funzionato bene per me

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit();

questo invierà btnsubmit = Salva come valore GET nel modulo register.php.


Questa sembra una soluzione più elegante. Ricorda solo di utilizzare encodeURIComponent()per il valore del parametro in base al tipo di dati.
— Andres SK,

1
Questo è effettivamente migliore quando consenti all'utente di inviare il modulo più volte. Il modulo non otterrà più di un campo nascosto con valori diversi.
— Mellon,

11

È possibile scrivere una funzione jQuery che consente di aggiungere campi nascosti a un modulo:

// This must be applied to a form (or an object inside a form).
jQuery.fn.addHidden = function (name, value) {
    return this.each(function () {
        var input = $("<input>").attr("type", "hidden").attr("name", name).val(value);
        $(this).append($(input));
    });
};

E quindi aggiungi il campo nascosto prima di inviare:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return')
                    .submit();

1
Vedi stackoverflow.com/questions/2601223/… per la versione più avanzata di addHidden
— Jonathan

1
Mi piace la semplicità di questa soluzione. Non gestisce molti casi, ma gestisce bene il caso che fa.
— Phil

11

Non è necessario associare l'evento di invio al clic del pulsante di invio, basta associare l'evento di invio e acquisirà l'evento di invio non importa come viene attivato.

Pensa che ciò che desideri è inviare il ordinabile come faresti tramite Ajax. Prova a fare qualcosa del genere:

var form = $('#event').submit(function () {
    $.each($('#attendance').sortable('toArray'),function(i, value){
        $("<input>").attr({
            'type':'hidden',
            'name':'attendace['+i+']'
        }).val(value).appendTo(form);
    });
});

ancora non mostrato sul formcollection lato server ... c'è qualcosa di speciale che devo fare per ottenere un campo nascosto da mostrare su un server? Sta attraversando C # / ASP.NET MVC usando un oggetto FormCollection.
— Ciel,

Aggiornato la mia risposta, penso di aver capito cosa stai cercando di fare.
— PetersenDidIt

Stai aggiungendo un nameattributo all'input del modulo nascosto generato? Come per stackoverflow.com/questions/504681/... sembra che gli oggetti FormCollection richiedono tutti gli <input>elementi per avere i nomi.
— npdoty,

Sì, sto cercando di inserire un ordinabile nel formcollection come una stringa di valori separati da virgola. Ho provato il tuo aggiornamento e non viene ancora pubblicato. Non sono sicuro di cosa sto facendo di sbagliato ... Apprezzo l'aiuto.
— Ciel,

Sembra che il problema non sia sul lato client ma sul lato server.
— PetersenDidIt

2

Risposta simile, ma volevo solo renderlo disponibile per un test facile / veloce.

var input = $("<input>")
               .attr("name", "mydata").val("go Rafa!");

$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>



<form id="easy_test">
  
</form>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.