jquery ottiene tutti gli input da un modulo specifico


84

C'è un modo per popolare tutti gli input da un determinato modulo? diciamo, qualcosa del genere:

<form id="unique00">
  <input type="text" name="whatever" id="whatever" value="whatever" />
  <div>
    <input type="checkbox" name="whatever" id="whatever" value="whatever" />
  </div>
  <table><tr><td>
    <input type="hidden" name="whatever" id="whatever" value="whatever" />
    <input type="submit" value="qweqsac" />
  </td></tr></table>
</form>
<form id="unique01">
  <div>
    <input type="text" name="whatever" id="whatever" value="whatever" />
    <input type="checkbox" name="whatever" id="whatever" value="whatever" />
  </div>
  <table><tr><td>
    <input type="hidden" name="whatever" id="whatever" value="whatever" />
  </td></tr></table>
  <select>blah...</select>
  <input type="submit" value="qweqsac" />
</form>
etc forms... forms...

* nota: ogni modulo potrebbe avere una diversa quantità di input e tipo e anche una diversa struttura html

quindi c'è un modo per popolare l'input da un certo form id? ad esempio, se faccio clic sul pulsante di invio da un determinato ID modulo, jquery compilerà per me tutto l'input all'interno di tali ID modulo. attualmente quello che sto facendo è così:

$("form").submit(function(){ return validateForm($(this)) });
function validateForm(form){
var retVal = true;
var re;
$.each(form.serializeArray(), function(i, field) {
  var input = $('input[name='+field.name+']');
  field.value = $.trim(field.value);
  switch(field.name){
    case "name" :
        and another cases...
      }
    })
 }

è stato un lavoro, ma in quel caso ottengo solo field.name e field.value, e in realtà quello che voglio è, voglio un oggetto jquery per ogni elemento di input, quindi posso accedere al loro css, id, name e persino animare quegli elementi di input

c'è un modo per questo?

per favore fatemelo sapere e grazie in anticipo! E

Risposte:


180

Per scorrere tutti gli input in un modulo puoi fare questo:

$("form#formID :input").each(function(){
 var input = $(this); // This is the jquery object of the input, do what you will
});

Questo usa il selettore jquery : input per ottenere TUTTI i tipi di input, se vuoi solo del testo puoi fare:

$("form#formID input[type=text]")//...

eccetera.


3
Penso: l'input funziona per quello, ma altrimenti potresti fare:$("form#formID input[type=text],form#formID select")
TJB

Nota un errore di battitura nella tua prima risposta sopra. $ ("da dovrebbe essere $ (" form
Mitch

1
$("form#formID :input").eachinputtipo di output , selecttipo e persino buttoninput di tipo. Almeno lo fa nel mio codice.
TARKUS

3
@TARKUS inputvs :input. $ (": input") seleziona tutti gli elementi del modulo jQuery. $ ("input") seleziona solo i tag di input.
Johnathan Elmore

25

Il codice seguente aiuta a ottenere i dettagli degli elementi dal modulo specifico con l'id del modulo,

$('#formId input, #formId select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

Il codice seguente aiuta a ottenere i dettagli degli elementi da tutti i moduli che si trovano nella pagina di caricamento,

$('form input, form select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

Il codice seguente aiuta a ottenere i dettagli degli elementi che si trovano nella pagina di caricamento anche quando l'elemento non è posizionato all'interno del tag,

$('input, select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

NOTA: aggiungiamo il nome del tag più elemento di cui abbiamo bisogno nell'elenco degli oggetti come di seguito,

Example: to get name of attribute "textarea",

$('input, select, textarea').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

1
Non ottengo il valore del testo usando questo input.val () .. potete aiutarmi in questo?
DhavalThakor

Colpa mia. Sory stavo cercando un posto sbagliato per l'output.
DhavalThakor

3

Utilizza l' attributo "elementi" del modulo HTML :

$.each($("form").elements, function(){ 
    console.log($(this));
    });

Ora non è necessario fornire nomi come "input, textarea, select ..." ecc.


Dooh! --way troppe informazioni. Prova un modo più rapido di vedere le informazioni del modulo $ ("form: input"). Each (function (index) {console.log (index, this.type, this.id, this.name, this.value, this.placeholder );});
Jules Bartow
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.