ล้างเขตข้อมูลฟอร์มด้วย jQuery


402

ฉันต้องการล้างฟิลด์อินพุตและฟิลด์ textarea ทั้งหมดในแบบฟอร์ม มันทำงานเหมือนดังต่อไปนี้เมื่อใช้ปุ่มอินพุตกับresetคลาส:

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

การทำเช่นนี้จะล้างฟิลด์ทั้งหมดในหน้าไม่ใช่เฉพาะจากแบบฟอร์ม ตัวเลือกของฉันจะมีลักษณะอย่างไรสำหรับรูปแบบที่ปุ่มรีเซ็ตจริงใช้งานอยู่


ตรวจสอบคำตอบโดย Paolo Bergantino stackoverflow.com/questions/680241/blank-out-a-form-with-jquery
Wicked Coder

2
รายละเอียดเพิ่มเติมวิธีการในการตั้งค่ารูปแบบที่นี่
Uzbekjon

คำตอบ:


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

49
อย่าลืมinput[type=password]สาขาของคุณ
SammyK

64
คำตอบนี้ครอบคลุมคำถามเดิม ผู้ที่ต้องการมากกว่าเพียงแค่ฟิลด์ข้อความจะต้องเพิ่มรหัสตามที่ต้องการ ...
ShaneBlake

2
ยังจำได้ว่าจะมีประเภทของอินพุตอื่น ๆ นอกเหนือจาก type = รหัสผ่าน (เช่น SammyK พูดว่า) ใน HTML5: type = url, type = digit, type = email, ฯลฯhttp://www.w3.org/TR/html5/forms .html # states-of-the-type-attribute
Gabriel

6
เคล็ดลับเล็ก ๆ : ตัวเลือกนี้จะไม่เลือกองค์ประกอบการป้อนข้อมูลที่ขึ้นอยู่กับปริยาย type = text คุณต้องรวม type = text ไว้ในมาร์กอัปของคุณอย่างชัดเจน อาจจะเห็นได้ชัด แต่ไม่ใช่สำหรับฉันแล้วตอนนี้ :-)
Elbin

2
@CaptSaltyJack: รีเซ็ตค่าเป็นค่าเริ่มต้นซึ่งไม่ใช่สิ่งเดียวกับการล้างค่า ...
ShaneBlake

628

สำหรับ jQuery 1.6+ :

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

สำหรับ jQuery <1.6 :

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

โปรดดูโพสต์นี้: การรีเซ็ตฟอร์มหลายขั้นตอนด้วย jQuery

หรือ

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

ในฐานะ jQuery แนะนำ :

เพื่อดึงและคุณสมบัติการเปลี่ยนแปลง DOM เช่นchecked, selectedหรือdisabledสถานะขององค์ประกอบของแบบฟอร์มใช้.prop ()วิธีการ


3
ส่วนแรกของรหัสจะตั้งค่าช่องทำเครื่องหมายเป็น "" แทนที่จะยกเลิกการเลือก และจะไม่มีผลกับตัวเลือกเนื่องจากเป็นแท็กตัวเลือกที่เลือกไว้

6
$(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value');เพื่อหลีกเลี่ยงการลบค่าช่องทำผมใช้ต่อไปนี้แรงบันดาลใจจากคำตอบของคุณ: มันจะลบค่าเริ่มต้น (เช่นvalue="something"แต่ไม่ใช่สำหรับช่องทำเครื่องหมายหรือการเลือก
Jeppe Mariager-Lam

17
อย่าใช้สิ่งนี้ (ตัวเลือก 1) หากคุณมีวิทยุช่องทำเครื่องหมายหรือเลือกคุณจะเสียเวลามากในการหาจุดบกพร่องแปลก ๆ หลังจากค่าของมันหายไป รุ่นที่ถูกต้องซึ่งทำให้ค่าของพวกเขาเหมือนเดิม: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val('');(ขึ้นอยู่กับความคิดเห็นของ Jeppe Mariager-Lam)
Konstantin Pereiaslov

8
เหตุผลใดที่จะหลีกเลี่ยงตัวเลือกที่สอง?
rineez

6
วิธีการแก้ปัญหาที่สองของคุณเป็นคำตอบที่เกิดขึ้นจริง
abzarak

159

ไม่ควรใช้เหตุผลนี้เพราะอะไร

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

17
@ pythonian29033: และด้วยวิธีการของคุณคุณจะรีเซ็ตฟอร์มทั้งหมดในหน้าเป็นค่าเริ่มต้น ... ซึ่งไม่ใช่สิ่งที่นักพัฒนาทั่วไปต้องการแน่นอน ฉันคิดว่านักพัฒนา jQuery ควรสังเกตความจริงว่าเขา / เธอต้องการเปลี่ยนตัวเลือกจากโค้ดตัวอย่างเป็นตัวที่เหมาะสม ...
Sk8erPeter

8
@ Sk8erPeter หากคุณมีองค์ประกอบหลายอย่างในหน้าเว็บที่มี ID แสดงformว่าคุณทำผิด คุณต้องการจะขวาถ้าเลือกได้แต่มันก็ค่อนข้างเลือกหมายเลขform #form
brandones

@ แบรนด์: คุณควรให้ความสนใจกับสิ่งที่คุณตอบเพราะคุณผิด ... :) ตรวจสอบรหัสที่pythonian29033เขียน (ซึ่งฉันตอบกลับไปก่อนหน้านี้): $("form").trigger('reset');เป็นต้นเหตุให้เกิดเหตุการณ์ "รีเซ็ต" ใน<form>องค์ประกอบทั้งหมด ในกรณีส่วนใหญ่มันอาจจะผิด แต่$("#form").trigger('reset');(แสดงในคำตอบเดิม) จะทริกเกอร์เหตุการณ์ "รีเซ็ต" ในองค์ประกอบที่มีการตั้งค่า "ฟอร์ม" id (เข้าถึงได้ด้วย#formตัวเลือก) และใช่ควรใช้หนึ่ง id เพียงครั้งเดียวนี่คือสาเหตุที่พวกเขาเรียกมันว่า "id" เพราะมันระบุองค์ประกอบหนึ่งอย่างชัดเจน
Sk8erPeter

61

สิ่งนี้จะไม่จัดการกรณีที่ช่องป้อนแบบฟอร์มมีค่าเริ่มต้นที่ไม่ว่าง

สิ่งที่ชอบควรทำงาน

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

ฉันเพิ่งได้รหัส js จากโพสต์แรกของฉันและต้องการให้มันทำงานในแต่ละหน้าด้วยปุ่มรีเซ็ตหลายอันในหลายรูปแบบ ดังนั้นมันจึงเป็นเพียงตัวเลือกที่ต้องการความช่วยเหลือ
tbuehlmann

51

ถ้าคุณใช้ตัวเลือกและทำให้ค่าเป็นค่าว่างมันจะไม่รีเซ็ตฟอร์มมันทำให้ฟิลด์ทั้งหมดว่างเปล่า การตั้งค่าใหม่คือการสร้างฟอร์มเหมือนก่อนการแก้ไขใด ๆ จากผู้ใช้หลังจากโหลดแบบฟอร์มจากฝั่งเซิร์ฟเวอร์ หากมีการป้อนข้อมูลด้วยชื่อ "ชื่อผู้ใช้" และชื่อผู้ใช้นั้นได้รับการเติมล่วงหน้าจากฝั่งเซิร์ฟเวอร์โซลูชันส่วนใหญ่ในหน้านี้จะลบค่านั้นจากการป้อนข้อมูลไม่รีเซ็ตเป็นค่าเหมือนก่อนการเปลี่ยนแปลงของผู้ใช้ หากคุณต้องการรีเซ็ตฟอร์มใช้สิ่งนี้:

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

หากคุณไม่ต้องการรีเซ็ตฟอร์ม แต่กรอกข้อมูลทั้งหมดด้วยค่าบางค่าตัวอย่างเช่นค่าว่างคุณสามารถใช้โซลูชันส่วนใหญ่จากความคิดเห็นอื่น ๆ


29

เรียบง่าย แต่ทำงานเหมือนจับใจ

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

14
ยกเว้นจะไม่ล้างฟิลด์ มันตั้งค่าเริ่มต้นของพวกเขา
Mark Fraser

29

หากใครบางคนยังอ่านหัวข้อนี้อยู่นี่เป็นทางออกที่ง่ายที่สุดโดยไม่ใช้ jQuery แต่เป็น JavaScript ธรรมดา หากฟิลด์อินพุตของคุณอยู่ในแบบฟอร์มจะมีคำสั่งรีเซ็ต JavaScript แบบง่าย:

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

เพิ่มเติมเกี่ยวกับที่นี่: http://www.w3schools.com/jsref/met_form_reset.asp

ไชโย!


อย่างที่บอก มันจะรีเซ็ตไปที่ค่ารูปแบบบริสุทธิ์และไม่ล้างค่า แต่ใช่ถ้าคุณโหลดฟอร์มที่มีค่าเริ่มต้นแล้วพวกเขาจะไม่ถูกล้างออก อาจเป็นห่วง JS ที่ไปยังรางป้อนข้อมูลทั้งหมดและล้างพวกเขา
Tarmo Saluste


17

ทำไมมันต้องทำกับ JavaScript ใด ๆ เลย?

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

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


พยายามที่หนึ่งก่อนจะไม่ล้างช่องด้วยค่าเริ่มต้น

นี่คือวิธีที่จะทำกับ jQuery แล้ว:

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

1
พยายามที่หนึ่งก่อนมันจะไม่ล้างเขตข้อมูลที่มีค่าเริ่มต้น
tbuehlmann

มีอีกสาเหตุที่คุณมักจะต้องใช้ JavaScript สำหรับอันนี้ แบบฟอร์มอาจไม่ใช่ "แบบฟอร์ม" เลย ตัวอย่างเช่นฟอร์มของคุณเป็นเพียงการรวบรวมอินพุตสำหรับแอป Backbone.js / Ember.js / AngularJS และข้อมูลจะไม่ถูกส่งเป็นรูปแบบดั้งเดิมไปยังเซิร์ฟเวอร์ แต่ต้องดำเนินการอย่างเคร่งครัดกับฝั่งไคลเอ็นต์ JavaScript ในกรณีเช่นนี้จะไม่มีการรีเซ็ตฟอร์มให้ทำงาน
John Munsch

3
.live()เลิกใช้แล้วและยังช้า / ไม่จำเป็น คุณก็สามารถใช้หรือ.bind() .on()
Kevin Beal

14

หากคุณต้องการล้างกล่องใส่ข้อมูลทั้งหมดโดยไม่คำนึงถึงประเภทของมันก็เป็นขั้นตอนโดย

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

12

ฉันมีเคล็ดลับที่ง่ายที่สุดในการรีเซ็ตแบบฟอร์ม

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

หรือ

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

12

ด้วย Javascript คุณสามารถทำได้ด้วยไวยากรณ์นี้ getElementById("your-form-id").reset();

คุณยังสามารถใช้ jquery ได้โดยเรียกใช้ฟังก์ชันรีเซ็ตด้วยวิธีนี้ $('#your-form-id')[0].reset();

[0]จำไม่ได้ที่จะลืม คุณจะได้รับข้อผิดพลาดต่อไปนี้หาก

TypeError: $ (... ). reset ไม่ใช่ฟังก์ชั่น

JQuery ยังมีกิจกรรมที่คุณสามารถใช้ได้

$ ( '# form_id') ทริกเกอร์ ( "รีเซ็ต.");

ฉันพยายามแล้วก็ใช้งานได้

หมายเหตุ: สิ่งสำคัญคือต้องสังเกตว่าวิธีการเหล่านี้รีเซ็ตฟอร์มของคุณเป็นค่าเริ่มต้นที่ตั้งโดยเซิร์ฟเวอร์เมื่อโหลดหน้าเว็บ ซึ่งหมายความว่าหากการป้อนข้อมูลของคุณถูกตั้งค่า 'ค่าการตั้งค่า' ก่อนที่คุณจะทำการเปลี่ยนแปลงแบบสุ่มฟิลด์จะถูกรีเซ็ตเป็นค่าเดียวกันหลังจากเรียกวิธีการรีเซ็ต

หวังว่ามันจะช่วย


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

ที่editPOIFormเป็นidแอตทริบิวต์ของแบบฟอร์มของคุณ


2
จะมีเพียงหนึ่งเดียวเท่านั้น#editPOIFormดังนั้น.each()วิธีการจึงไม่มีเหตุผล แม้ว่าคุณจะเพิ่มรหัสนี้ในหลายรูปแบบมันจะส่งคืนหนึ่งในนั้นเท่านั้น
Kevin Beal

1
แต่ละรายการ () อนุญาตให้คุณใช้สิ่งนี้ (แทน $ (สิ่งนี้)) เพื่อรับวัตถุ DOM ที่อยู่ข้างใต้และการรีเซ็ตการโทร () สมมติว่าคุณต้องการรีเซ็ตเป็นค่าเริ่มต้นแทนที่จะล้างทุกอย่างนี่เป็นทางออกที่ดี
เดฟ

@Dave Might เช่นกันเพียงแค่ใช้$('#editPOIForm').get(0).reset();
โทมัส Daugaard

2
@ThomasDaugaard: ยกเว้นว่าถ้าคุณใช้รับ (0) หรือเพียงแค่ $ ('# editPOIForm') [0] คุณจะได้รับข้อผิดพลาดของสคริปต์ถ้า $ ('# editPOIForm') ตรงกับองค์ประกอบใด ๆ ในขณะที่แต่ละรายการจะล้มเหลว ข้อผิดพลาด ดังนั้นฉันคิดว่ามันขึ้นอยู่กับลำดับความสำคัญของคุณเท่าที่การจัดการข้อผิดพลาดเกิดขึ้น
เดฟ


6

รหัสผ่านการทดสอบและตรวจสอบแล้ว:

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

ต้องรวม Javascript ไว้ด้วย$(document).readyและต้องเป็นไปตามตรรกะของคุณ


5

ทางออกที่ง่ายที่สุดและดีที่สุดคือ -
$("#form")[0].reset();

อย่าใช้ที่นี่ -
$(this)[0].reset();


เพียงเตือนเล็กน้อย: ถ้าคุณมีค่าเริ่มต้นสำหรับอินพุตสมมติว่าเซิร์ฟเวอร์แสดงผลจากนั้นform.reset();จะรีเซ็ตเป็นค่าเหล่านั้นและไม่ล้างอินพุต
Evil_Bengt

4

ให้เราบอกว่าถ้าคุณต้องการล้างเขตข้อมูลและยกเว้น accountType ในกล่องแบบเลื่อนลงเวลาเฉลี่ยจะถูกรีเซ็ตเป็นค่าเฉพาะเช่น 'All'.Remaining field ควรถูกรีเซ็ตเป็นช่องว่างเช่นกล่องข้อความวิธีการนี้จะใช้สำหรับการล้าง สาขาเฉพาะตามความต้องการของเรา

 $(':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';
     }
 });

คำตอบที่สมบูรณ์ที่สุด ขอบคุณ
RationalRabbit

คำถามหนึ่ง: คุณจะนำสิ่งนี้ไปยังรูปแบบเฉพาะได้อย่างไรถ้าคุณทำแบบเป็นโปรแกรมแทนที่จะคลิกเพียงปุ่มเดียว?
RationalRabbit


3

ใช้รหัสนี้ในที่ที่คุณต้องการเรียกฟังก์ชั่นการรีเซ็ตปกติโดย jQuery

setTimeout("reset_form()",2000);

และเขียนฟังก์ชันนี้ออกจากไซต์ jQuery บนเอกสารพร้อม

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

3

บางท่านบ่นว่าวิทยุและสถานะดังกล่าวถูกล้างสถานะ "ตรวจสอบ" ที่เป็นค่าเริ่มต้นแล้ว ... สิ่งที่คุณต้องทำคือเพิ่มตัวเลือกช่องทำเครื่องหมาย: วิทยุ,: ให้กับ. not และปัญหาจะได้รับการแก้ไข

หากคุณไม่สามารถใช้งานฟังก์ชั่นการรีเซ็ตอื่น ๆ ได้ฟังก์ชันนี้จะทำงาน

  • ดัดแปลงมาจากคำตอบของ 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 คือการระบุตัวตนของแบบฟอร์ม
  2. OnSuccessของการดำเนินการที่เราเรียกใช้ฟังก์ชัน JavaScript ด้วยชื่อ " ClearInput"

    <script type="text/javascript">
        function ClearInput() {
            //call action for render create view
            $("#frmID").get(0).reset();
        }
    </script>
  3. หากคุณทำทั้งสองอย่างถูกต้องคุณจะไม่สามารถหยุดทำงาน ...


1

โค้ดต่อไปนี้จะเคลียร์ทุกฟอร์มและฟิลด์นั้นจะว่างเปล่า หากคุณต้องการล้างเฉพาะแบบฟอร์มหากหน้ามีมากกว่าหนึ่งรูปแบบโปรดระบุ id หรือคลาสของแบบฟอร์ม

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

0

หากฉันต้องการล้างฟิลด์ทั้งหมดยกเว้นบัญชีประเภทใช้วิธีต่อไปนี้

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

1
คุณไม่ต้องการที่จะสูญเสียค่าสำหรับช่องทำเครื่องหมาย en radiobuttons แต่ยกเลิกการเลือกพวกเขาหนึ่งนี้ไม่ได้เป็นทางออกที่ดี
Frankey

0

รหัสที่ฉันเห็นที่นี่และที่เกี่ยวข้องดังนั้นคำถามที่ดูเหมือนจะไม่สมบูรณ์

การรีเซ็ตฟอร์มหมายถึงการตั้งค่าดั้งเดิมจาก HTML ดังนั้นฉันจึงรวมมันเข้าด้วยกันสำหรับโครงการเล็ก ๆ น้อย ๆ ที่ฉันทำตามรหัสข้างต้น:

            $(':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()) })

โปรดแจ้งให้เราทราบหากฉันไม่มีสิ่งใดหรือปรับปรุงได้


0

ไม่มีการทำงานใด ๆ ข้างต้นในกรณีง่าย ๆ เมื่อเพจมีการเรียกไปยังการควบคุมผู้ใช้เว็บที่เกี่ยวข้องกับการประมวลผลคำขอ IHttpHandler (captcha) หลังจากส่ง requsrt (สำหรับการประมวลผลภาพ) รหัสด้านล่างจะไม่ล้างฟิลด์ในแบบฟอร์ม (ก่อนส่งคำขอ HttpHandler) ทุกอย่างทำงานได้อย่างถูกต้อง

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

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

0

ฉันเขียนปลั๊กอิน jQuery สากล:

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

เพิ่มปุ่มรีเซ็ตที่ซ่อนอยู่ดังต่อไปนี้

<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

$ ('ฟอร์ม'). ส่ง (ฟังก์ชั่น () {

var el = $(this);

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

return false;

});

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.