Cancella i campi modulo con jQuery


402

Voglio cancellare tutti i campi di input e textarea in un modulo. Funziona come il seguente quando si utilizza un pulsante di input con la resetclasse:

$(".reset").bind("click", function() {
  $("input[type=text], textarea").val("");
});

Questo cancellerà tutti i campi della pagina, non solo quelli del modulo. Come sarebbe il mio selettore solo per la forma in cui si trova il pulsante di ripristino attuale?



2
Metodo più dettagliato per ripristinare un modulo qui .
Uzbekjon,

Risposte:


487
$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});

49
Non dimenticare i tuoi input[type=password]campi.
SammyK,

64
Questa risposta copre la domanda originale. Coloro che desiderano più di un semplice campo di testo dovranno ovviamente aggiungere il codice se necessario ...
ShaneBlake,

2
ricorda anche che ci saranno più tipi di input oltre a type = password (come ha detto SammyK) in HTML5: type = url, type = digit, type = email, ecc http://www.w3.org/TR/html5/forms .html # stati-of-the-type-attributo
Gabriel

6
Un piccolo consiglio: questo selettore non selezionerà gli elementi di input che si basano sul tipo implicito = testo, è necessario includere esplicitamente il tipo = testo nel markup. Questo può essere ovvio, ma non era per me, proprio ora :-)
Elbin il

2
@CaptSaltyJack: che li ripristina ai valori predefiniti che non è la stessa cosa di cancellarli ...
ShaneBlake,

628

Per jQuery 1.6+ :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .prop('checked', false)
  .prop('selected', false);

Per jQuery <1.6 :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .removeAttr('checked')
  .removeAttr('selected');

Si prega di consultare questo post: reimpostazione di un modulo in più fasi con jQuery

O

$('#myform')[0].reset();

Come suggerisce jQuery :

Per recuperare e modificare le proprietà DOM come il checked, selectedo disabledstato degli elementi di modulo, utilizzare il .prop () metodo.


3
Il primo pezzo di codice imposterà i valori delle caselle su "" invece di deselezionarli. E non influenzerà le selezioni, perché sono i tag di opzione che vengono selezionati.

6
per evitare di rimuovere i valori di caselle di controllo, ho usato il seguente, ispirato dalla tua risposta: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value');. Rimuoverà i valori predefiniti (ovvero value="something", ma non per le caselle di controllo o le selezioni.
Jeppe Mariager-Lam

17
NON UTILIZZARE QUESTO (opzione 1) se si dispone di radio, caselle di controllo o selezioni, si perde molto tempo a trovare uno strano bug dopo che i loro valori scompaiono. La versione corretta, che lascia intatti i loro valori: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val('');(basato sul commento di Jeppe Mariager-Lam)
Konstantin Pereiaslov,

8
Qualche motivo per evitare la seconda opzione?
rineez,

6
la tua seconda soluzione è la risposta effettiva
abzarak,

159

Qualche motivo per cui non dovrebbe essere usato?

$("#form").trigger('reset');

17
@ pythonian29033: e con il tuo approccio, ripristinerai le impostazioni predefinite di TUTTI i moduli della pagina ... che NON è sicuramente quello che vuole un normale sviluppatore. Penso che uno sviluppatore jQuery dovrebbe prendere atto del fatto che deve cambiare il selettore da un codice di esempio a un codice appropriato ...
Sk8erPeter

8
@ Sk8erPeter Se nella pagina sono presenti più elementi con ID form, lo stai facendo in modo sbagliato. Avresti ragione se il selettore fosse form, ma è piuttosto il selettore ID #form.
brandones

@brandones: Avresti dovuto prestare attenzione a ciò a cui stavi rispondendo, perché ti sbagli ... :) Controlla il codice che pythonian29033 ha scritto (a cui ho risposto in precedenza): $("form").trigger('reset');attiva davvero l'evento "reset" su TUTTI gli <form>elementi. Nella maggior parte dei casi, potrebbe essere sbagliato. Ma $("#form").trigger('reset');(mostrato nella risposta originale) innesca solo l'evento "reset" sull'elemento che ha l'ID "form" impostato (raggiungibile con il #formselettore). E sì, un id dovrebbe essere usato solo una volta, ecco perché lo chiamano "id", perché identifica un elemento in modo inequivocabile.
Sk8erPeter

61

Questo non gestirà i casi in cui i campi di input del modulo hanno valori predefiniti non vuoti.

Qualcosa del genere dovrebbe funzionare

$('yourdiv').find('form')[0].reset();

Ho solo il codice js dal mio primo post e voglio che funzioni su ogni pagina con diversi pulsanti di reset in diverse forme. Quindi è solo il selettore che ha bisogno di un contributo.
tbuehlmann,

51

se si utilizzano i selettori e si creano valori per svuotare i valori, questo non reimposta il modulo, ma svuota tutti i campi. Il ripristino consiste nel rendere il modulo come prima di qualsiasi azione di modifica da parte dell'utente dopo il caricamento del modulo dal lato server. Se è presente un input con nome "nome utente" e tale nome utente è stato precompilato dal lato server, la maggior parte delle soluzioni in questa pagina eliminerà quel valore dall'input, non ripristinandolo al valore precedente alle modifiche dell'utente. Se è necessario reimpostare il modulo, utilizzare questo:

$('#myform')[0].reset();

se non è necessario reimpostare il modulo, ma riempire tutti gli input con un valore, ad esempio un valore vuoto, è possibile utilizzare la maggior parte delle soluzioni da altri commenti.


29

Semplice ma funziona come un fascino.

$("#form").trigger('reset'); //jquery
document.getElementById("myform").reset(); //native JS

14
Solo che non cancella i campi. Li imposta sui valori predefiniti.
Mark Fraser,

29

Se qualcuno sta ancora leggendo questo thread, ecco la soluzione più semplice che utilizza non jQuery, ma JavaScript semplice. Se i campi di input sono all'interno di un modulo, esiste un semplice comando di reimpostazione JavaScript:

document.getElementById("myform").reset();

Maggiori informazioni qui: http://www.w3schools.com/jsref/met_form_reset.asp

Saluti!


Come si dice. Si reimposta sul valore della forma innitale e non svuota i valori. Sì, se hai caricato un modulo con valori predefiniti, questi non verranno cancellati. Probabilmente un loop JS che attraversa tutti gli input e li cancella
Tarmo Saluste,


17

Perché deve essere fatto con qualsiasi JavaScript?

<form>
    <!-- snip -->
    <input type="reset" value="Reset"/>
</form>

http://www.w3.org/TR/html5/the-input-element.html#attr-input-type-keywords


L'ho provato prima, non cancella i campi con valori predefiniti.

Ecco un modo per farlo con jQuery, quindi:

$('.reset').on('click', function() {
    $(this).closest('form').find('input[type=text], textarea').val('');
});

1
L'ho provato prima, non cancella i campi con i valori predefiniti.
tbuehlmann,

C'è un altro motivo per cui spesso hai bisogno di JavaScript per questo. Il modulo potrebbe non essere affatto un "modulo". Ad esempio, il modulo è in realtà solo una raccolta di input per un'app Backbone.js / Ember.js / AngularJS e i dati non verranno mai inviati al server come un modulo tradizionale ma devono essere elaborati rigorosamente con il lato client JavaScript. In casi come questo non esiste un modulo per il ripristino su cui lavorare.
John Munsch,

3
.live()è deprecato e anche lento / non necessario. Potresti semplicemente usare .bind()o .on().
Kevin Beal,

14

Se si desidera svuotare tutte le caselle di input indipendentemente dal tipo, è un minuto

 $('#MyFormId')[0].reset();

12

Ho il trucco più semplice per ripristinare il modulo

jQuery("#review-form")[0].reset();

o

$("#review-form").get().reset();

12

Con Javascript puoi semplicemente farlo con questa sintassi getElementById("your-form-id").reset();

puoi anche usare jquery chiamando la funzione reset in questo modo $('#your-form-id')[0].reset();

Ricorda di non dimenticare [0]. Otterrai il seguente errore se

TypeError: $ (...). Reset non è una funzione

JQuery fornisce anche un evento che è possibile utilizzare

$ ( '# Form_id') grilletto ( "reset").;

Ho provato e funziona.

Nota: è importante notare che questi metodi reimpostano il modulo al loro valore iniziale impostato dal server al caricamento della pagina. Ciò significa che se il tuo input è stato impostato sul valore "set value" prima di apportare una modifica casuale, il campo verrà reimpostato sullo stesso valore dopo che è stato chiamato il metodo di reset.

Spero che sia d'aiuto


7
$('#editPOIForm').each(function(){ 
    this.reset();
});

dov'è editPOIForml' idattributo del tuo modulo.


2
Ce ne sarà solo uno #editPOIForme quindi il .each()metodo non ha senso. Anche se hai aggiunto questo ID a più moduli, ne restituirebbe solo uno.
Kevin Beal,

1
Each () consente di utilizzare questo (anziché $ (this)) per accedere all'oggetto DOM sottostante e chiamare reset (). Supponendo che si desideri ripristinare i valori predefiniti, anziché cancellare tutto, questa è una buona soluzione.
Dave,

@Dave Potrebbe anche usare$('#editPOIForm').get(0).reset();
Thomas Daugaard

2
@ThomasDaugaard: tranne che se usi get (0) o semplicemente $ ('# editPOIForm') [0] otterrai un errore di script se $ ('# editPOIForm') non corrisponde ad alcun elemento, mentre ciascuno () fallirà senza un errore. Quindi suppongo che dipenda dalle tue priorità per quanto riguarda la gestione degli errori.
Dave,

6

Perché non usi document.getElementById("myId").reset();? questo è semplice e carino


6

Codice testato e verificato:

  $( document ).ready(function() {
    $('#messageForm').submit(function(e){
       e.preventDefault();
    });
    $('#send').click(function(e){
      $("#messageForm")[0].reset();
    });
  });

Javascript deve essere incluso in $(document).readye deve essere con la tua logica.


5

La soluzione più semplice e migliore è-
$("#form")[0].reset();

Non usare qui -
$(this)[0].reset();


Solo un piccolo avvertimento: se hai valori predefiniti per gli input, diciamo renderizzati dal server, form.reset();ripristineremo questi valori e non cancelleremo gli input.
Evil_Bengt,

4

Diciamo se si desidera cancellare i campi e ad eccezione di accountType, nel frattempo la casella a discesa verrà reimpostata su un valore particolare, ad esempio 'All'.I campi rimanenti dovrebbero essere reimpostati su vuoti, ad esempio casella di testo. Questo approccio verrà utilizzato per cancellare campi particolari come nostro requisito.

 $(':input').not('#accountType').each( function() {

    if(this.type=='text' || this.type=='textarea'){
             this.value = '';
       }
    else if(this.type=='radio' || this.type=='checkbox'){
         this.checked=false;
      }
         else if(this.type=='select-one' || this.type=='select-multiple'){
              this.value ='All';
     }
 });

La risposta più completa. Grazie.
Rational

Una domanda: come indirizzeresti a un modulo specifico se lo facessi in modo programmatico, anziché con un clic sul pulsante?
Rational


3

Utilizzare questo codice dove si desidera chiamare la funzione di ripristino normale di jQuery

setTimeout("reset_form()",2000);

E scrivi questa funzione sul sito jQuery su Document Ready

<script>
function reset_form()
{
    var fm=document.getElementById('form1');
    fm.reset();
}
</script>

3

Alcuni di voi si sono lamentati del fatto che le radio e simili sono state cancellate dallo stato "controllato" predefinito ... Tutto quello che dovete fare è aggiungere i selettori: radio,: checkbox al .not e il problema è risolto.

Se non riesci a far funzionare tutte le altre funzioni di ripristino, questa funzionerà.

  • Adattato dalla risposta di ngen

    function form_reset(formID){
        $(':input','#'+formID)
        .not(':button',':submit',':reset',':hidden',':radio',':checkbox')
        .val('');
    }

2
@using (Ajax.BeginForm("Create", "AcceptanceQualityDefect", new AjaxOptions()
{
    OnSuccess = "ClearInput",
    HttpMethod = "Post",
    UpdateTargetId = "defect-list",
    InsertionMode = InsertionMode.Replace
}, new { @id = "frmID" })) 
  1. frmID è l'identificazione del modulo
  2. OnSuccessdell'operazione chiamiamo la funzione JavaScript con il nome " ClearInput"

    <script type="text/javascript">
        function ClearInput() {
            //call action for render create view
            $("#frmID").get(0).reset();
        }
    </script>
  3. se fai entrambe queste cose bene, allora non sarai in grado di impedirle di funzionare ...


1

Il codice seguente cancella tutto il modulo e i suoi campi saranno vuoti. Se si desidera cancellare solo un modulo particolare se la pagina ha più di un modulo, indicare l'id o la classe del modulo

$("body").find('form').find('input,  textarea').val('');

0

Se desidero cancellare tutti i campi tranne accountType ... Utilizzare quanto segue

$q(':input','#myform').not('#accountType').val('').removeAttr('checked').removeAttr('selected');

1
non vuoi perdere i valori delle caselle di controllo nei pulsanti radio, ma deselezionali solo, questa non è una buona soluzione
Frankey

0

il codice che vedo qui e sulle relative domande SO sembra incompleto.

Reimpostare un modulo significa impostare i valori originali dall'HTML, quindi l'ho messo insieme per un piccolo progetto che stavo facendo in base al codice sopra:

            $(':input', this)
                .not(':button, :submit, :reset, :hidden')
                .each(function(i,e) {
                    $(e).val($(e).attr('value') || '')
                        .prop('checked',  false)
                        .prop('selected', false)
                })

            $('option[selected]', this).prop('selected', true)
            $('input[checked]',   this).prop('checked',  true)
            $('textarea',         this).each(function(i,e) { $(e).val($(e).html()) })

Per favore fatemi sapere se mi manca qualcosa o qualcosa può essere migliorato.


0

Nessuna delle opzioni precedenti funziona in un caso semplice quando la pagina include una chiamata al controllo utente Web che prevede l'elaborazione della richiesta IHttpHandler (captcha). Dopo aver inviato requsrt (per l'elaborazione delle immagini) il codice seguente non cancella i campi nel modulo (prima di inviare la richiesta HttpHandler) tutto funziona correttamente.

<input type="reset"  value="ClearAllFields" onclick="ClearContact()" />

 <script type="text/javascript">
       function ClearContact() {
           ("form :text").val("");
       }
    </script>

0

Ho scritto un plugin jQuery universale:

/**
 * Resets any input field or form
 */
$.fn.uReset = function () {
    return this.filter('form, :input').each(function () {
        var input = $(this);
        
        // Reset the form.
        if (input.is('form')) {
            input[0].reset();
            return;
        }

        // Reset any form field.
        if (input.is(':radio, :checkbox')) {
            input.prop('checked', this.defaultChecked);
        } else if (input.is('select')) {
            input.find('option').each(function () {
                $(this).prop('selected', this.defaultSelected);
            });
        } else if (this.defaultValue) {
            input.val(this.defaultValue);
        } else {
            console.log('Cannot reset to default value');
        }
    });
};

$(function () {
    // Test jQuery plugin.
    $('button').click(function (e) {
        e.preventDefault();
        
        var button = $(this),
            inputType = button.val(),
            form = button.closest('form');
        
        if (inputType === 'form') {
            form.uReset()
        } else {
            $('input[type=' + inputType + '], ' + inputType, form).uReset();
        }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h3>Form</h3>
<form>
    <input type="text" value="default"/><br /><br />
    Ch 1 (default checked) <input type="checkbox" name="color" value="1" checked="checked" /><br />
    Ch 2 <input type="checkbox" name="color" value="2" /><br />
    Ch 3 (default checked) <input type="checkbox" name="color" value="3" checked="checked" /><br /><br />
    <select name="time"><br />
        <option value="15">15</option>
        <option selected="selected" value="30">30</option>
        <option value="45">45</option>
    </select><br /><br />
    R 1 <input type="radio" name="color" value="1" /><br />
    R 2 (default checked) <input type="radio" name="color" value="2" checked="checked" /><br />
    R 3 <input type="radio" name="color" value="3" /><br /><br />
    <textarea>Default text</textarea><br /><br />
    
    <p>Play with form values and then try to reset them</p>
    
    <button type="button" value="text">Reset text input</button>
    <button type="button" value="checkbox">Reset checkboxes</button>
    <button type="button" value="select">Reset select</button>
    <button type="button" value="radio">Reset radios</button>
    <button type="button" value="textarea">Reset textarea</button>
    <button type="button" value="form">Reset the Form</button>
</form>


-2

Aggiungi il pulsante di ripristino nascosto come segue

<input id="resetBtn" type="reset" value="reset" style="display:none" />
// Call reset buttons click event
// Similar to ClearInputs('resetBtn');
function ClearInputs(btnSelector) {
     var btn = $("#" + btnSelector);
     btn.click();
}

-4

$ ('form'). submit (function () {

var el = $(this);

$('<button type="reset" style="display:none; "></button>')
    .appendTo(el)
    .click()
    .remove()
;

return false;

});

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.