Come resettare un modulo usando jQuery con il metodo .reset ()


270

Avevo un codice funzionante che poteva ripristinare il mio modulo quando facevo clic su un pulsante di ripristino. Tuttavia, dopo che il mio codice si sta allungando, mi rendo conto che non funziona più.

 <div id="labels">
        <table class="config">
            <thead>
                <tr>
                    <th colspan="4"; style= "padding-bottom: 20px; color:#6666FF; text-align:left; font-size: 1.5em">Control Buttons Configuration</th>
                </tr>
                <tr>
                    <th>Index</th>
                    <th>Switch</th>
                    <th>Response Number</th>
                    <th>Description</th>
                </tr>
            </thead>
            <tbody>

                <form id="configform" name= "input" action="#" method="get">
                <tr><td style="text-align: center">1</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" value="" id="number_one"></td>
                    <td><input style="background: white; color: black;" type="text"  id="label_one"></td>
                </tr>
                <tr>
                    <td style="text-align: center">2</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id = "number_two" value=""></td>
                    <td><input style="background: white; color: black;" type="text"  id = "label_two"></td>
                </tr>
                <tr>
                    <td style="text-align: center">3</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_three" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td style="text-align: center">4</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_four" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" id="configsubmit" value="Submit"></td>
                </tr>
                <tr>
                    <td><input type="reset" id="configreset" value="Reset"></td>
                </tr>

                </form>
            </tbody>
        </table>

    </div>

E il mio jQuery:

 $('#configreset').click(function(){
            $('#configform')[0].reset();
 });

C'è qualche fonte che dovrei includere nei miei codici affinché il .reset()metodo funzioni? In precedenza stavo usando:

<script src="static/jquery.min.js">
</script>
<script src="static/jquery.mobile-1.2.0.min.js">
</script>

e il .reset()metodo stava funzionando.

Attualmente sto usando

<script src="static/jquery-1.9.1.min.js"></script>      
<script src="static/jquery-migrate-1.1.1.min.js"></script>
<script src="static/jquery.mobile-1.3.1.min.js"></script>

Potrebbe forse essere uno dei motivi?


puoi fare un esempio di non lavorare? qualcuno dei campi viene resettato?
Arun P Johny

è qualcosa del genere ma qui sta funzionando bene jsfiddle.net/chJ8B :( probabilmente a causa di altre parti della sceneggiatura? ma ho solo 1 modulo
yvonnezoe

la mia domanda è se nessuno dei campi è resettato / alcuni funzionano
Arun P Johny

13
Il tuo HTML non è valido . Un modulo non può essere figlio di un elemento TBODY e un TR non può essere figlio di un elemento FORM. Inserisci i tag del modulo all'esterno della tabella (ovvero inserisci la tabella nel modulo). Molto probabilmente il modulo viene spostato all'esterno della tabella, ma i controlli del modulo rimangono nelle celle, quindi non sono più nel modulo.
RobG

@RobG: O buon punto! lo proverò. grazie! avrei potuto perdere questo utile commento se non
fossi

Risposte:


464

potresti provare a usare trigger () Link di riferimento

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

2
Semplicemente magico e diretto! Molto apprezzato per la condivisione.
Ajay Kumar,

cari votanti, potreste per favore dirmi il motivo dei vostri voti negativi, in modo che io possa migliorare la mia risposta.
SagarPPanchal,

Sto usando $ ('. Profile_img_form'). Trigger ('reset'); ho aggiunto profile_img_form con nome classe sul mio modulo e poi l'ho chiamato. non reimposta il mio modulo e restituisce un messaggio di errore come Sintassi non rilevata Errore: espressione regolare non valida: /(^|\.)bs\.(?:.*\.|)fileinput(\.|$)/: si prega di suggerire problema. Grazie.
Kamlesh,

@Kamlesh dovrebbe funzionare, ho creato una demo per te, fai clic su jsfiddle.net/Lkt4eq9y/2
SagarPPanchal,

1
Grazie per la risposta. Ore risparmiate di Google / SO :)
Anjana Silva

276

http://jsfiddle.net/8zLLn/

  $('#configreset').click(function(){
        $('#configform')[0].reset();
  });

Mettilo nel violino JS. Ha funzionato come previsto.

Quindi, nessuna delle questioni sopra menzionate è in difetto qui. Forse stai riscontrando un problema con l'ID in conflitto? Il clic sta effettivamente eseguendo?

Modifica: (perché sono un sacco triste senza un'adeguata capacità di commento) Non è un problema direttamente con il tuo codice. Funziona bene quando lo togli dal contesto della pagina che stai attualmente utilizzando, quindi, invece di essere qualcosa con i particolari dati jQuery / javascript e attribuiti al modulo, deve essere qualcos'altro. Comincerei a bisecare il codice attorno ad esso e proverei a trovare dove sta succedendo. Voglio dire, solo per "accertarmi", suppongo che tu possa ...

console.log($('#configform')[0]);

nella funzione clic e assicurati che abbia come target il modulo giusto ...

e se lo è, deve essere qualcosa che non è elencato qui.

modifica parte 2: una cosa che potresti provare (se non è indirizzata correttamente) è usare "input: reset" invece di quello che stai usando ... inoltre, suggerirei perché non è l'obiettivo che non funziona correttamente per scoprirlo quale sia il target del clic effettivo. Apri gli strumenti per sviluppatori / firebug, tutto ciò che ti serve, lancia

console.log($('#configreset'))

e vedi cosa appare. e poi possiamo andare da lì.


nessun ID in conflitto :( sto provando a selezionare strato per strato e verificare se il clic funziona
yvonnezoe

1
hmm sembra che il clic non funzioni! ho aggiunto $('#ptest').html("clicked reset")nel clic (funzione () {}); dove dovrebbe mostrare "clicked reset" ma non è
apparso

Ho una domanda qui. ogni volta che uso console.log, non ho idea di dove cercarlo. sto usando Python IDLE e un terminale per eseguire lo script Python. il javascript è in esso. comunque, quando uso `alert ($ ('# configform') [0]), mi dà [object HTMLFormElement]
yvonnezoe

1
Prova a utilizzare alert (JSON.stringify ($ '# configform') [0])). Alert non si preoccupa molto dei bei oggetti di stampa (o che ti dicono cosa c'è dentro). Ti fa solo sapere che è un oggetto.
FullOnFlatWhite

1
@DylanChensky la magia di jQuery è che tutto è un set (array). Proprio come se si stesse utilizzando un array normale in jQuery [0]seleziona il primo elemento. Ma in jQuery, seleziona l'html effettivo dell'elemento. Quindi, ti [0]sta dando l'html, che ti permette di chiamare il metodo html, non jQuery, chiamato reset. Vedi la risposta di @kevin sotto per maggiori informazioni.
FullOnFlatWhite

110

Secondo questo post qui , jQuery non ha alcun reset()metodo; ma JavaScript nativo lo fa. Quindi, converti l'elemento jQuery in un oggetto JavaScript usando:

$("#formId")[0].reset()
// or
$("#formId").get(0).reset()

1
Funziona e sono d'accordo, jQuery non ha alcun metodo reset (). Puoi vedere come farlo con JavaScript nativo su w3school doc: w3schools.com/jsref/met_form_reset.asp
serfer2

2
Vorrei sottolineare che questo ripristinerà solo il modulo, non cancellarlo. Vale a dire, se nel modulo sono stati inviati valori con la richiesta, questi verranno ripristinati.
Protector un

Vorrei aggiungere un commento sul segnaposto, il rendering iniziale del modulo, gli elementi del modulo hanno valori di segnaposto, dopo questo ripristino indipendentemente dal segnaposto mostrato di nuovo ma il valore diventa vuoto, quindi fai attenzione durante la convalida del modulo. Stavo aggiungendo la convalida del modulo generico per verificare che il valore del segnaposto sia predefinito.
Ramratan Gupta,

48

Questa è una di quelle cose che in realtà è più facile fare in Javascript vanilla di jQuery. jQuery non ha un resetmetodo, ma l'elemento del modulo HTML ha, quindi puoi resettare tutti i campi in un modulo come questo:

document.getElementById('configform').reset();

Se lo fai tramite jQuery (come si vede in altre risposte qui :) $('#configform')[0].reset(), [0]sta recuperando lo stesso elemento DOM del modulo che otterresti direttamente tramite document.getElementById. Quest'ultimo approccio è allo stesso tempo più efficiente e più semplice (poiché con l'approccio jQuery ottieni prima una raccolta e poi devi recuperare un elemento da essa, mentre con il Javascript vanilla ottieni semplicemente l'elemento direttamente).


23

Un pulsante di ripristino non ha bisogno di alcuno script (o nome o ID):

<input type="reset">

e hai finito. Ma se proprio necessario utilizzare lo script, nota che ogni controllo di modulo ha una forma di proprietà che fa riferimento al modulo che è dentro, in modo che si possa fare:

<input type="button" onclick="this.form.reset();">

Ma un pulsante di ripristino è una scelta molto migliore.


vuoi dire semplicemente che farà solo quella linea? oO quindi il mio HTML sopra è corretto?
yvonnezoe,

Definire "non funzionante". Che errore ricevi? Cosa non funziona? I pulsanti di ripristino fanno parte dei moduli HTML per sempre, funzionano.
RobG

1
"non funzionante" - non reimposta nulla, non è stato visto alcun cambiamento nel modulo.
yvonnezoe,

1
Qualcosa da notare è che "reset" non significa "il mio modulo è cancellato". Quello che effettivamente fa la semantica di "reset" è riportare tutti gli elementi "form" ai loro attributi "value" originali. Questo mi ha confuso almeno per qualche minuto!
Giovedì

@ jocull: quando tutto il resto fallisce, c'è sempre la versione W3C o WHATWG dello standard HTML. ;-)
RobG

21

Finalmente ho risolto il problema !! @RobG aveva ragione su formtag e tabletag. il formtag deve essere posizionato fuori dal tavolo. con quello,

<td><input type="reset" id="configreset" value="Reset"></td>

funziona senza la necessità di jquery o altro. basta fare clic sul pulsante e tadaa ~ l'intero modulo viene ripristinato;) geniale!


3
di solito puoi confermare che ciò sta accadendo ispezionando il codice sorgente (non visualizzando l'origine della pagina, poiché ciò mostrerà ciò che è stato generato, ma piuttosto usando qualcosa come Strumenti per gli sviluppatori <kbd> F12 </kbd>), che ti mostra "cosa il browser visualizza "- nel qual caso ti mostrerebbe (almeno in Chrome) che il formtag è stato automaticamente chiuso all'inizio del tbody, esclusi gli elementi di input.
drzaus,



13

Usando la funzione jquery .closest (element) e .find (...) .

Ottenere l' elemento genitore e cercare il figlio .

Infine, esegui la funzione necessaria.

$("#form").closest('form').find("input[type=text], textarea").val("");

4
Sebbene questo blocco di codice possa rispondere alla domanda, devi sempre fornire una spiegazione del perché.
Sascha Wolf,

1
$("#form").find("input[type=text], textarea").val("");l'ho fatto in questo modo
Bira il

11

La prima riga ripristinerà gli input del modulo

$('form#myform').trigger("reset"); //Line1
$('form#myform select').trigger("change"); //Line2

Il secondo ripristinerà select2

Facoltativo: puoi utilizzarlo se hai tipi diversi registrati con eventi diversi

$('form#myform select, form input[type=checkbox]').trigger("change"); //Line2

5

Un ripristino rapido dei campi modulo è possibile con questa funzione di ripristino jQuery.

quando hai ottenuto la risposta di successo, spara sotto il codice.

$(selector)[0].reset();


4

Puoi semplicemente aggiungere un tipo di input = reset con un id = resetform come questo

<html>
<form>
<input type = 'reset' id = 'resetform' value = 'reset'/>
<!--Other items in the form can be placed here-->
</form>
</html>

quindi con jquery usi semplicemente la funzione .click () sull'elemento con id = resetform come segue

<script> 
$('#resetform').click();
</script>

e il modulo si reimposta Nota: è anche possibile nascondere il pulsante di ripristino con id = resetform utilizzando il proprio CSS

<style>
#resetform
{
display:none;
}
</style>

Non dimenticare di nasconderlo ... per renderlo una forma più moderna. <input type = 'reset' id = 'resetform' value = 'reset' / style = 'display: none;'>
mangas

3

Ecco una soluzione semplice con Jquery. Funziona a livello globale. Dai un'occhiata al codice.

$('document').on("click", ".clear", function(){
   $(this).closest('form').trigger("reset");
})

Aggiungi una classe chiara a un pulsante in ogni modulo necessario per ripristinarlo. Per esempio:

<button class="button clear" type="reset">Clear</button>

3

jQuery non ha reset()metodo; ma JavaScript nativo lo fa. Quindi, converti l'elemento jQuery in un oggetto JavaScript usando:

$("#formId")[0].reset();

$("#formId").get(0).reset();

Possiamo semplicemente usare il codice Javascript

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

2
<button type="reset">Reset</reset>

Il modo più semplice di pensare che sia robusto. Posizionare all'interno del tag del modulo.


1

È possibile utilizzare quanto segue.

@using (Html.BeginForm("MyAction", "MyController", new { area = "MyArea" }, FormMethod.Post, new { @class = "" }))
{
<div class="col-md-6">
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">
        @Html.LabelFor(m => m.MyData, new { @class = "col-form-label" })
    </div>
    <div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
        @Html.TextBoxFor(m => m.MyData, new { @class = "form-control" })
    </div>
</div>
<div class="col-md-6">
    <div class="">
        <button class="btn btn-primary" type="submit">Send</button>
        <button class="btn btn-danger" type="reset"> Clear</button>
    </div>
</div>
}

Quindi cancella il modulo:

    $('.btn:reset').click(function (ev) {
        ev.preventDefault();
        $(this).closest('form').find("input").each(function(i, v) {
            $(this).val("");
        });
    });

Sembra che ci sia un sacco di codice specifico per il framework qui. Raccomando di evitare queste cose quando si rispondono a domande su SO, poiché la domanda non specificava che stavano usando qualsiasi framework oltre a jQuery
Lazerbeak12345

0

Il tuo codice dovrebbe funzionare. Assicurarsi che static/jquery-1.9.1.min.jsesista. Inoltre, puoi provare a ripristinare static/jquery.min.js. Se questo risolve il problema, hai individuato il problema.


L'unico altro problema che mi viene in mente è che hai un'altra forma con lo stesso id ( configform). Dovresti fare qualche indagine usando la console. Primo tentativo $. Se stai usando Chrome, digitando $nella console verrà attivato un elenco sensibile al contesto se jQuery è caricato. Se si digita $e si preme invio, verrà valutata una funzione se jQuery è caricato. Prossimo tentativo $("#configform"). Fare clic con il tasto destro del mouse sul risultato e selezionare Reveal in Elements panel.
ic3b3rg

grazie :) ma non ho Chrome. è lo stesso modo per farlo usando firebug? (l'ho installato ma non lo uso mai prima)
yvonnezoe,
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.