Cara mereset formulir menggunakan metode jQuery with .reset ()

270

Saya memiliki kode kerja yang dapat mengatur ulang formulir saya ketika saya mengklik tombol reset. Namun setelah kode saya semakin panjang, saya menyadari bahwa itu tidak berfungsi lagi.

 <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>

Dan jQuery saya:

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

Apakah ada beberapa sumber yang harus saya sertakan dalam kode saya agar .reset()metode ini berfungsi? Sebelumnya saya menggunakan:

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

dan .reset()metode itu berhasil.

Saat ini saya menggunakan

<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>

Mungkinkah itu salah satu alasannya?

yvonnezoe
sumber
dapatkah Anda memberi contoh tidak bekerja? Apakah ada bidang yang direset?
Arun P Johny
ini sesuatu seperti ini tetapi berfungsi dengan baik di sini jsfiddle.net/chJ8B :( mungkin karena bagian lain dari skrip? tetapi saya hanya memiliki 1 bentuk
yvonnezoe
pertanyaan saya adalah apakah tidak ada satu bidang pun yang dipindahkan / ada yang berfungsi
Arun P Johny
13
HTML Anda tidak valid . Formulir tidak bisa menjadi anak dari elemen TBODY, dan TR tidak bisa menjadi anak dari elemen FORMULIR. Letakkan tag formulir di luar tabel (yaitu, letakkan tabel dalam formulir). Sangat mungkin formulir dipindahkan di luar tabel, tetapi kontrol formulir tetap di sel sehingga mereka tidak lagi dalam formulir.
RobG
@RobG: O poin bagus! Saya akan mencobanya. Terima kasih! saya bisa melewatkan komentar bermanfaat ini jika saya tidak kembali ke sini untuk mendapatkan tautan biola saya: s
yvonnezoe

Jawaban:

464

Anda dapat mencoba menggunakan trigger () Link Referensi

$('#form_id').trigger("reset");
SagarPPanchal
sumber
2
Cukup ajaib dan lurus ke depan! Sangat dihargai untuk berbagi.
Ajay Kumar
pemilih yang terhormat, bisakah Anda memberi tahu saya alasan di balik suara Anda, sehingga saya dapat meningkatkan jawaban saya.
SagarPPanchal
Saya menggunakan $ ('. Profile_img_form'). Trigger ('reset'); Saya telah menambahkan kelas bernama profile_img_form pada formulir saya lalu memanggilnya. itu tidak me-reset formulir saya dan mengembalikan pesan kesalahan seperti Uncaught SyntaxError: Ekspresi reguler tidak valid: /(^^). isu. Terima kasih.
Kamlesh
@Kamlesh seharusnya bekerja, saya telah membuat demo untuk Anda, klik jsfiddle.net/Lkt4eq9y/2
SagarPPanchal
1
Terima kasih atas jawabannya. Tersimpan jam Googling / SO'ing :)
Anjana Silva
276

http://jsfiddle.net/8zLLn/

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

Taruh di biola JS. Bekerja sebagaimana dimaksud.

Jadi, tidak ada masalah yang disebutkan di atas yang salah di sini. Mungkin Anda mengalami masalah ID yang saling bertentangan? Apakah klik itu benar-benar mengeksekusi?

Sunting: (karena saya karung sedih tanpa kemampuan berkomentar yang tepat) Ini bukan masalah langsung dengan kode Anda. Ini berfungsi dengan baik ketika Anda mengeluarkannya dari konteks halaman yang sedang Anda gunakan, jadi, alih-alih menjadi sesuatu dengan jQuery / javascript & data formulir yang dikaitkan, itu harus berupa sesuatu yang lain. Saya akan mulai membagi dua kode di sekitarnya dan mencoba menemukan di mana itu terjadi. Maksudku, hanya untuk 'memastikan', kurasa kau bisa ...

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

di fungsi klik dan pastikan itu menargetkan bentuk yang tepat ...

dan jika ya, pasti ada sesuatu yang tidak tercantum di sini.

sunting bagian 2: Satu hal yang dapat Anda coba (jika tidak menargetkannya dengan benar) adalah menggunakan "input: reset" alih-alih apa yang Anda gunakan ... juga, saya sarankan karena bukan target yang salah bekerja untuk mencari tahu apa yang sebenarnya ditargetkan oleh klik. Cukup buka alat pembakar / pengembang, siapa saja Anda, masukkan

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

dan lihat apa yang muncul. dan kemudian kita bisa pergi dari sana.

FullOnFlatWhite
sumber
tidak ada ID yang bertentangan :( saya mencoba untuk memilih lapisan demi lapisan dan memeriksa apakah
kliknya
1
hmm sepertinya klik tidak berfungsi! saya menambahkan $('#ptest').html("clicked reset")di klik (fungsi () {}); di mana ia akan ditampilkan "reset diklik" tetapi tidak muncul
yvonnezoe
saya punya pertanyaan di sini. setiap kali saya menggunakan console.log, saya tidak tahu di mana mencarinya. Saya menggunakan Python IDLE dan terminal untuk menjalankan skrip python. javascript ada di dalamnya. lagi pula, ketika saya menggunakan `alert ($ ('# configform') [0]), itu memberi saya [objek HTMLFormElement]
yvonnezoe
1
Coba gunakan lansiran (JSON.stringify ($ '# configform') [0])). Peringatan tidak terlalu peduli untuk objek pencetakan yang cantik (atau memberi tahu Anda apa isinya). Itu hanya membuat Anda tahu bahwa itu adalah objek.
FullOnFlatWhite
1
@DylanChensky keajaiban jQuery adalah bahwa semuanya adalah himpunan (array). Sama seperti jika Anda menggunakan array biasa di jQuery [0]memilih elemen pertama. Namun dalam jQuery, ia memilih html elemen yang sebenarnya. Jadi, [0]memberi Anda html, yang memungkinkan Anda untuk memanggil html, bukan jQuery, metode yang disebut reset. Lihat jawaban @kevin di bawah untuk informasi lebih lanjut.
FullOnFlatWhite
110

Menurut posting ini di sini , jQuery tidak memiliki reset()metode; tetapi JavaScript asli tidak. Jadi, konversikan elemen jQuery ke objek JavaScript dengan menggunakan:

$("#formId")[0].reset()
// or
$("#formId").get(0).reset()
Kevin
sumber
1
Ini berfungsi dan saya setuju, jQuery tidak memiliki metode reset (). Anda dapat melihat bagaimana melakukannya dengan JavaScript asli di w3school doc: w3schools.com/jsref/met_form_reset.asp
serfer2
2
Saya ingin mencatat bahwa ini hanya akan mengatur ulang formulir, tidak menghapusnya. Yaitu, jika formulir memiliki nilai yang dikirim dengan permintaan, itu akan dikembalikan.
Pelindung satu
Saya ingin menambahkan komentar mengenai placeholder, render awal form, elemen form memiliki nilai placeholder, setelah reset ini terlepas dari placeholder yang ditampilkan lagi tetapi nilainya menjadi kosong, jadi hati-hati saat mengisi formulir validasi. Saya menambahkan validasi formulir generik untuk memeriksa nilai placeholder default.
Ramratan Gupta
48

Ini adalah salah satu hal yang sebenarnya lebih mudah dilakukan dalam Javascript vanilla daripada jQuery. jQuery tidak memiliki resetmetode, tetapi Elemen HTML Form tidak, sehingga Anda dapat mengatur ulang semua bidang dalam bentuk seperti ini:

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

Jika Anda melakukan ini melalui jQuery (seperti yang terlihat dalam jawaban lain di sini: $('#configform')[0].reset()), yang [0]sedang mengambil elemen bentuk DOM yang sama bahwa Anda akan mendapatkan langsung melalui document.getElementById. Pendekatan terakhir lebih efisien dan lebih sederhana (karena dengan pendekatan jQuery, Anda pertama-tama mendapatkan koleksi dan kemudian harus mengambil elemen dari itu, sedangkan dengan Javascript vanilla Anda hanya mendapatkan elemen secara langsung).

Nick F
sumber
23

Tombol atur ulang tidak memerlukan skrip sama sekali (atau nama atau id):

<input type="reset">

dan kamu sudah selesai. Tetapi jika Anda benar - benar harus menggunakan skrip, perhatikan bahwa setiap kontrol formulir memiliki properti formulir yang mereferensikan formulir itu, sehingga Anda bisa melakukannya:

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

Tetapi tombol reset adalah pilihan yang jauh lebih baik.

RobG
sumber
maksudmu hanya garis yang akan dilakukan? oO jadi html saya di atas benar?
yvonnezoe
Tentukan "tidak bekerja". Kesalahan apa yang Anda dapatkan? Apa yang tidak bekerja Tombol reset telah menjadi bagian dari formulir HTML selamanya, mereka berfungsi.
RobG
1
"tidak berfungsi" - tidak mengatur ulang apa pun, tidak ada perubahan yang terlihat di formulir.
yvonnezoe
1
Yang perlu diperhatikan adalah bahwa "reset" tidak berarti "formulir saya dihapus". Apa sebenarnya yang dilakukan semantik "reset" adalah mengembalikan semua elemen "bentuk" kembali ke atribut "nilai" aslinya. Itu membingungkan saya setidaknya selama beberapa menit!
jocull
@ jocull — ketika semuanya gagal, selalu ada versi standar HTML W3C atau WHATWG . ;-)
RobG
21

Saya akhirnya memecahkan masalah !! @RobG benar tentang formtag dan tabletag. yang formtag harus ditempatkan di luar meja. dengan itu,

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

bekerja tanpa perlu jquery atau apa pun. klik sederhana pada tombol dan tadaa ~ seluruh formulir di-reset;) brilian!

yvonnezoe
sumber
3
Anda biasanya dapat mengonfirmasi ini terjadi dengan memeriksa kode sumber (tidak melihat sumber halaman, karena itu akan menunjukkan apa yang dihasilkan, melainkan menggunakan sesuatu seperti Alat Pengembang <kbd> F12 </kbd>), yang menunjukkan kepada Anda "apa yang browser melihat "- dalam hal ini akan menunjukkan kepada Anda (di Chrome, setidaknya) bahwa formtag telah ditutup secara otomatis di awal tbody, tidak termasuk elemen input.
drzaus
periksa kompatibilitasnya: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/reset
Diego Avila
16

Saya menggunakan kode sederhana ini:

//reset form 
$("#mybutton").click(function(){
    $("#myform").find('input:text, input:password, input:file, select, textarea').val('');
    $("#myform").find('input:radio, input:checkbox').removeAttr('checked').removeAttr('selected');
});
fausto
sumber
13

Dengan menggunakan fungsi jquery .closest (elemen) dan .find (...) .

Mendapatkan elemen induk dan mencari anak .

Akhirnya, lakukan fungsi yang dibutuhkan.

$("#form").closest('form').find("input[type=text], textarea").val("");
aldrien.h
sumber
4
Meskipun blok kode ini dapat menjawab pertanyaan, Anda harus selalu memberikan penjelasan mengapa itu terjadi.
Sascha Wolf
1
$("#form").find("input[type=text], textarea").val("");saya melakukan cara ini
Bira
11

Baris pertama akan mengatur ulang input formulir

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

Yang kedua akan mereset select2

Opsional: Anda dapat menggunakan ini jika Anda memiliki jenis yang berbeda yang terdaftar pada acara yang berbeda

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

Reset cepat bidang isian dimungkinkan dengan fungsi reset jQuery ini.

ketika Anda mendapat respons sukses maka jalankan kode di bawah ini.

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

Kiran Kanzar
sumber
4

Anda bisa menambahkan tipe input = reset dengan id = resetform seperti ini

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

kemudian dengan jquery Anda cukup menggunakan fungsi .click () pada elemen dengan id = resetform sebagai berikut

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

dan form reset Catatan: Anda juga dapat menyembunyikan tombol reset dengan id = resetform menggunakan css Anda

<style>
#resetform
{
display:none;
}
</style>
Chuksy
sumber
Jangan lupa menyembunyikannya ... untuk membuatnya menjadi bentuk yang lebih modern. <input type = 'reset' id = 'resetform' value = 'reset' / style = 'display: none;'>
mangas
3

Inilah solusi sederhana dengan Jquery. Ini bekerja secara global. Lihatlah kodenya.

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

Tambahkan kelas yang jelas ke tombol di setiap formulir yang Anda butuhkan untuk meresetnya. Sebagai contoh:

<button class="button clear" type="reset">Clear</button>
Ijharul Islam
sumber
3

jQuery tidak memiliki reset()metode; tetapi JavaScript asli tidak. Jadi, konversikan elemen jQuery ke objek JavaScript dengan menggunakan:

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

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

Kami cukup menggunakan kode Javascript

document.getElementById("formid").reset();
Vivek Pawar
sumber
2
<button type="reset">Reset</reset>

Cara paling sederhana yang bisa saya pikirkan adalah kuat. Tempatkan di dalam tag formulir.

desain luminanced
sumber
1

Anda dapat menggunakan yang berikut ini.

@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>
}

Kemudian kosongkan formulir:

    $('.btn:reset').click(function (ev) {
        ev.preventDefault();
        $(this).closest('form').find("input").each(function(i, v) {
            $(this).val("");
        });
    });
RainyTears
sumber
Tampaknya ada banyak kode kerangka kerja khusus di sini. Saya sarankan menghindari hal-hal seperti itu ketika menjawab pertanyaan pada SO, karena pertanyaan itu tidak menentukan bahwa mereka menggunakan kerangka kerja selain dari jQuery
Lazerbeak12345
0

Kode Anda harus berfungsi. Pastikan static/jquery-1.9.1.min.jsada. Anda juga dapat mencoba kembali ke static/jquery.min.js. Jika itu memperbaiki masalah maka Anda telah menunjuk masalah dengan tepat.

ic3b3rg
sumber
Satu-satunya masalah lain yang dapat saya pikirkan adalah bahwa Anda memiliki formulir lain dengan id yang sama ( configform). Anda harus melakukan penyelidikan menggunakan konsol. Percobaan pertama $. Jika Anda menggunakan Chrome, mengetik $di konsol akan mengaktifkan daftar peka konteks jika jQuery dimuat. Jika Anda mengetik $dan menekan kembali, itu akan mengevaluasi ke fungsi jika jQuery dimuat. Percobaan selanjutnya $("#configform"). Klik kanan pada hasilnya dan pilih Reveal in Elements panel.
ic3b3rg
terima kasih :) tetapi saya tidak punya chrome. apakah itu cara yang sama untuk melakukannya menggunakan pembakar? (saya sudah menginstalnya tetapi tidak pernah menggunakannya sebelumnya)
yvonnezoe