วิธีรีเซ็ตฟอร์มโดยใช้วิธี jQuery ด้วย. reset ()


270

ฉันมีรหัสการทำงานที่สามารถรีเซ็ตฟอร์มของฉันเมื่อฉันคลิกที่ปุ่มรีเซ็ต อย่างไรก็ตามหลังจากที่รหัสของฉันเริ่มยาวขึ้นฉันรู้ว่ามันไม่ทำงานอีกต่อไป

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

และ jQuery ของฉัน:

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

มีแหล่งที่ฉันควรรวมไว้ในรหัสของฉันเพื่อให้.reset()วิธีการทำงานหรือไม่ ก่อนหน้านี้ฉันใช้:

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

และ.reset()วิธีการทำงาน

ขณะนี้ฉันกำลังใช้

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

มันอาจเป็นหนึ่งในเหตุผลหรือไม่


คุณยกตัวอย่างการไม่ทำงานได้ไหม มีฟิลด์ใดที่ถูกลบทิ้ง?
อรุณ P Johny

มันเป็นอย่างนี้ แต่มันก็ทำงานได้ดีที่นี่jsfiddle.net/chJ8B :( อาจเป็นเพราะส่วนอื่น ๆ ของสคริปต์หรือไม่ แต่ฉันมีรูปแบบเดียวเท่านั้น
yvonnezoe

คำถามของฉันคือว่าไม่มีฟิลด์ใดถูกตั้งค่าใหม่ / บางส่วนทำงานได้ไหม
อรุณ P Johny

13
HTML ของคุณไม่ถูกต้อง ฟอร์มไม่สามารถเป็นลูกขององค์ประกอบ TBODY และ TR ไม่สามารถเป็นลูกขององค์ประกอบแบบฟอร์มได้ วางแท็กฟอร์มไว้นอกตาราง (เช่นใส่ตารางในฟอร์ม) อาจมีการย้ายแบบฟอร์มภายนอกตาราง แต่ตัวควบคุมฟอร์มอยู่ในเซลล์จึงไม่อยู่ในแบบฟอร์มอีกต่อไป
RobG

@RobG: O จุดดี! ฉันจะลองดู ขอบคุณ! ฉันอาจจะพลาดความคิดเห็นที่มีประโยชน์นี้ถ้าฉันไม่กลับมาที่นี่เพื่อรับซอลิงค์ของฉัน: s
yvonnezoe

คำตอบ:


464

คุณอาจลองใช้ทริกเกอร์ () ลิงค์อ้างอิง

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

2
เพียงแค่ขลังและตรงไปข้างหน้า! ชื่นชมมากสำหรับการแบ่งปัน
Ajay Kumar

เรียนผู้ลงคะแนนโปรดบอกเหตุผลที่อยู่เบื้องหลังการลงคะแนนเสียงของคุณเพื่อที่ฉันจะได้ปรับปรุงคำตอบของฉัน
SagarPPanchal

ฉันใช้ $ ('. profile_img_form'). trigger ('รีเซ็ต'); ฉันได้เพิ่ม profile_img_form ชื่อคลาสบนแบบฟอร์มของฉันแล้วเรียกมันว่า มันไม่ได้รีเซ็ตแบบฟอร์มของฉันและส่งคืนข้อความแสดงข้อผิดพลาดเช่น Uncaught SyntaxError: นิพจน์ทั่วไปไม่ถูกต้อง: /(^^\.)bs\.(?:.*\.|)fileinput(\.|$)/: กรุณาแนะนำว่าอะไรคือ ปัญหา. ขอบคุณ
Kamlesh

@ Kamlesh มันควรใช้งานได้ฉันได้สร้างตัวอย่างให้คุณแล้วคลิกที่jsfiddle.net/Lkt4eq9y/2
SagarPPanchal

1
ขอบคุณสำหรับคำตอบ. ชั่วโมงที่บันทึกของ Googling / SO'ing :)
Anjana Silva

276

http://jsfiddle.net/8zLLn/

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

วางไว้ในไวโอลินซอ ทำงานตามที่ตั้งใจไว้

ดังนั้นไม่มีปัญหาใด ๆ ที่กล่าวถึงข้างต้นจึงเป็นความผิดที่นี่ บางทีคุณอาจมีปัญหา ID ที่ขัดแย้งกันใช่ไหม การคลิกดำเนินการจริงหรือไม่

แก้ไข: (เพราะฉันเป็นกระสอบเศร้าไม่มีความสามารถในการแสดงความคิดเห็นที่เหมาะสม) มันไม่ใช่ปัญหาโดยตรงกับรหัสของคุณ มันใช้งานได้ดีเมื่อคุณนำมันออกจากบริบทของหน้าเว็บที่คุณใช้อยู่ในปัจจุบันดังนั้นแทนที่จะเป็นสิ่งที่มี jQuery / javascript และข้อมูลในรูปแบบเฉพาะนั้นจะต้องเป็นอย่างอื่น ฉันจะเริ่มตัดรหัสรอบ ๆ และพยายามค้นหาว่าเกิดอะไรขึ้น ฉันหมายถึงเพียงเพื่อ 'ทำให้แน่ใจ' ฉันคิดว่าคุณสามารถ ...

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

ในฟังก์ชั่นคลิกและตรวจสอบให้แน่ใจว่ามันกำลังกำหนดเป้าหมายรูปแบบที่เหมาะสม ...

และถ้าเป็นมันจะต้องเป็นสิ่งที่ไม่ได้ระบุไว้ที่นี่

แก้ไขส่วนที่ 2: สิ่งหนึ่งที่คุณสามารถลองได้ (หากไม่ได้กำหนดเป้าหมายอย่างถูกต้อง) คือใช้"อินพุต: รีเซ็ต"แทนที่จะเป็นสิ่งที่คุณใช้ ... และฉันขอแนะนำเพราะไม่ใช่เป้าหมายที่ทำงานไม่ถูกต้องเพื่อค้นหา การคลิกเป้าหมายคืออะไร เพียงแค่เปิดไฟร์บั๊ก / เครื่องมือสำหรับนักพัฒนาแล้วเหวี่ยงคุณโยนเข้าไป

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

และดูสิ่งที่ปรากฏขึ้น และจากนั้นเราสามารถไปจากที่นั่น


ไม่มีความขัดแย้ง ID :( ฉันพยายามที่จะเลือกชั้นโดยชั้นและตรวจสอบว่าคลิกงาน
yvonnezoe

1
ดูเหมือนว่าการคลิกไม่ทำงาน! ฉันเพิ่ม$('#ptest').html("clicked reset")ในการคลิก (ฟังก์ชั่น () {}); ที่มันควรจะแสดง "คลิกที่ตั้งค่าใหม่" แต่มันก็ไม่ปรากฏขึ้น
yvonnezoe

ฉันมีคำถามที่นี่ ทุกครั้งที่ฉันใช้ console.log ฉันไม่ทราบว่าจะต้องระวังอะไร ฉันใช้ Python IDLE และ terminal เพื่อรันสคริปต์ python จาวาสคริปต์อยู่ในนั้น อย่างไรก็ตามเมื่อฉันใช้ `การแจ้งเตือน ($ ('# configform') [0]) มันให้ฉัน [วัตถุ HTMLFormElement]
yvonnezoe

1
ลองใช้การแจ้งเตือน (JSON.stringify ($ '# configform') [0])) การแจ้งเตือนไม่ได้สนใจอะไรมากสำหรับวัตถุการพิมพ์ที่สวยงาม (หรือบอกคุณว่ามีอะไรอยู่ในนั้น) มันช่วยให้คุณรู้ว่ามันเป็นวัตถุ
FullOnFlatWhite

1
@DylanChensky ความมหัศจรรย์ของ jQuery คือทุกสิ่งเป็นชุด (อาร์เรย์) ราวกับว่าคุณกำลังใช้อาร์เรย์ปกติใน jQuery [0]เลือกองค์ประกอบแรก แต่ใน jQuery จะเลือก html ที่แท้จริงขององค์ประกอบ ดังนั้น[0]ให้คุณ HTML ซึ่งจะช่วยให้คุณสามารถโทร html ที่ไม่ jQuery resetวิธีการที่เรียกว่า ดูคำตอบของ @kevin ด้านล่างสำหรับข้อมูลเพิ่มเติม
FullOnFlatWhite

110

ตามโพสต์นี้ที่นี่ jQuery ไม่มีreset()วิธี; แต่จาวาสคริปต์ดั้งเดิมทำ ดังนั้นแปลงองค์ประกอบ jQuery เป็นวัตถุ JavaScript โดยใช้:

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

1
มันใช้งานได้และฉันเห็นด้วย jQuery ไม่มีวิธีรีเซ็ต () คุณสามารถดูวิธีการทำงานกับ JavaScript ดั้งเดิมได้ที่ w3school doc: w3schools.com/jsref/met_form_reset.asp
serfer2

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

ฉันต้องการเพิ่มความคิดเห็นเกี่ยวกับตัวยึด, การแสดงผลเริ่มต้นของฟอร์ม, องค์ประกอบของฟอร์มมีค่าของตัวยึดหลังจากการรีเซ็ตนี้โดยไม่คำนึงถึงตัวยึดตำแหน่งที่แสดงอีกครั้ง แต่ค่ากลายเป็นค่าว่าง ฉันเพิ่มการตรวจสอบแบบฟอร์มทั่วไปเพื่อตรวจสอบว่าค่าตัวยึดเป็นค่าเริ่มต้น
Ramratan Gupta

48

นี่คือหนึ่งในสิ่งเหล่านั้นที่ทำได้ง่ายกว่าจริง ๆ ในวานิลลา Javascript มากกว่า jQuery jQuery ไม่มีresetวิธีการ แต่องค์ประกอบของรูปแบบ HTML จะทำดังนั้นคุณสามารถรีเซ็ตเขตข้อมูลทั้งหมดในรูปแบบดังนี้

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

ถ้าคุณทำเช่นนี้ผ่าน jQuery (เท่าที่เห็นในคำตอบอื่น ๆ ที่นี่: $('#configform')[0].reset()) ที่[0]ถูกเรียกองค์ประกอบรูปแบบ DOM document.getElementByIdเดียวกันกับที่คุณจะได้รับโดยตรงผ่านทาง วิธีหลังมีทั้งประสิทธิภาพและเรียบง่ายกว่า (เนื่องจากด้วยวิธี jQuery คุณจะได้รับคอลเลคชันก่อนแล้วจึงต้องดึงองค์ประกอบจากมันในขณะที่ vanilla Javascript คุณจะได้รับองค์ประกอบโดยตรง)


23

ปุ่มรีเซ็ตไม่จำเป็นต้องมีสคริปต์ใด ๆ เลย (หรือชื่อหรือรหัส):

<input type="reset">

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

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

แต่ปุ่มรีเซ็ตเป็นตัวเลือกที่ดีกว่ามาก


คุณหมายถึงเพียงแค่บรรทัดนั้นจะทำอย่างไร oO html ของฉันถูกต้องหรือไม่
yvonnezoe

กำหนด "ไม่ทำงาน" คุณได้รับข้อผิดพลาดอะไร อะไรไม่ทำงาน ปุ่มรีเซ็ตเป็นส่วนหนึ่งของรูปแบบ HTML ตลอดไปมันใช้งานได้
RobG

1
"ไม่ทำงาน" - ไม่ได้รีเซ็ตอะไรเลยไม่เห็นการเปลี่ยนแปลงในแบบฟอร์ม
yvonnezoe

1
สิ่งที่ควรทราบคือ "รีเซ็ต" ไม่ได้หมายความว่า "แบบฟอร์มของฉันถูกล้าง" สิ่งที่ความหมายของ "รีเซ็ต" ทำจริงคือส่งคืนองค์ประกอบ "ฟอร์ม" ทั้งหมดกลับไปเป็นแอตทริบิวต์ "ค่า" ดั้งเดิม นั่นทำให้ฉันสับสนอย่างน้อยสองสามนาที!
jocull

@ jocull - เมื่อสิ่งอื่นล้มเหลวจะมีเวอร์ชัน HTML ของW3CหรือWHATWGเสมอ ;-)
RobG

21

ในที่สุดฉันก็แก้ปัญหาได้ !! @RobG ถูกต้องเกี่ยวกับformแท็กและtableแท็ก แท็กควรจะอยู่นอกตาราง กับที่form

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

ทำงานโดยไม่ต้องการ jquery หรือสิ่งอื่นใด คลิกง่ายที่ปุ่มและ Tadaa ~ รูปแบบทั้งหมดจะถูกรีเซ็ต;) ยอดเยี่ยม!


3
โดยปกติคุณสามารถยืนยันได้ว่าสิ่งนี้เกิดขึ้นโดยการตรวจสอบซอร์สโค้ด (ไม่ได้ดูซอร์สโค้ดของหน้าเว็บเพราะจะแสดงสิ่งที่สร้างขึ้น แต่แทนที่จะใช้บางอย่างเช่นเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ <kbd> F12 </kbd>) ซึ่งแสดงให้คุณเห็นว่า เบราว์เซอร์เห็น "- ในกรณีนี้มันจะแสดงให้คุณเห็น (ใน Chrome อย่างน้อย) ว่าformแท็กนั้นถูกปิดโดยอัตโนมัติเมื่อเริ่มต้นtbodyโดยไม่รวมองค์ประกอบการป้อนข้อมูล
drzaus

ตรวจสอบความเข้ากันได้: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/reset
Diego Avila


13

โดยใช้ฟังก์ชัน jQuery .closest (องค์ประกอบ)และประจำวันหา ( ... )

การเดินทางที่ผู้ปกครององค์ประกอบและกำลังมองหาสำหรับเด็ก

ในที่สุดทำฟังก์ชั่นที่จำเป็น

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

4
แม้ว่าบล็อกรหัสนี้อาจตอบคำถามคุณควรให้คำอธิบายเกี่ยวกับสาเหตุที่เป็นเช่นนั้นเสมอ
Sascha Wolf

1
$("#form").find("input[type=text], textarea").val("");ฉันทำแบบนี้
Bira

11

บรรทัดแรกจะรีเซ็ตอินพุตแบบฟอร์ม

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

อันที่สองจะรีเซ็ต select2

ทางเลือก:คุณสามารถใช้สิ่งนี้หากคุณลงทะเบียนประเภทที่แตกต่างกันกับเหตุการณ์ที่แตกต่าง

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

5

การรีเซ็ตแบบรวดเร็วของฟิลด์แบบฟอร์มสามารถทำได้ด้วยฟังก์ชั่นการรีเซ็ต jQuery นี้

เมื่อคุณได้รับการตอบสนองที่ประสบความสำเร็จจากนั้นให้ยิงโค้ดด้านล่าง

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


4

คุณสามารถเพิ่มอินพุต type = reset ด้วย id = resetform เช่นนี้

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

จากนั้นด้วย jquery คุณเพียงแค่ใช้ฟังก์ชั่น. คลิก () กับองค์ประกอบที่มี id = resetform ดังนี้

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

และรีเซ็ตฟอร์มหมายเหตุ: คุณสามารถซ่อนปุ่มรีเซ็ตด้วย id = resetform โดยใช้ css ของคุณ

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

อย่าลืมซ่อน ... เพื่อทำให้มันทันสมัยกว่านี้ <input type = 'reset' id = 'resetform' value = 'reset' / style = 'display: none;'>
mangas

3

นี่คือวิธีแก้ปัญหาง่ายๆด้วย Jquery มันทำงานได้ทั่วโลก ลองดูรหัส

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

เพิ่มคลาสที่ชัดเจนให้กับปุ่มในทุกรูปแบบที่คุณต้องการรีเซ็ต ตัวอย่างเช่น:

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

3

jQueryไม่มีreset()เมธอด แต่จาวาสคริปต์ดั้งเดิมทำ ดังนั้นแปลงองค์ประกอบ jQuery เป็นวัตถุ JavaScript โดยใช้:

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

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

เราอาจใช้รหัส Javascript

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

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

วิธีที่ง่ายที่สุดที่ฉันสามารถคิดออกว่ามีประสิทธิภาพ วางไว้ภายในแท็กแบบฟอร์ม


1

คุณสามารถใช้สิ่งต่อไปนี้

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

จากนั้นล้างฟอร์ม:

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

ดูเหมือนว่าจะมีรหัสเฉพาะกรอบงานจำนวนมากที่นี่ ฉันขอแนะนำให้หลีกเลี่ยงสิ่งต่าง ๆ เมื่อตอบคำถามใน SO เนื่องจากคำถามไม่ได้ระบุว่าพวกเขากำลังใช้เฟรมเวิร์กนอกเหนือจาก jQuery
Lazerbeak12345

0

รหัสของคุณควรใช้งานได้ ตรวจสอบให้แน่ใจว่าstatic/jquery-1.9.1.min.jsมีอยู่ static/jquery.min.jsนอกจากนี้คุณยังสามารถลองย้อนกลับไป หากวิธีนี้แก้ไขปัญหาได้คุณจะระบุปัญหาได้


ปัญหาเดียวที่ฉันคิดได้ก็คือคุณมีรูปแบบอื่นที่มีรหัสเดียวกัน ( configform) คุณควรทำการตรวจสอบโดยใช้คอนโซล $ลองครั้งแรก หากคุณใช้ Chrome การพิมพ์$ในคอนโซลจะเปิดใช้งานรายการตามบริบทหากมีการโหลด jQuery หากคุณพิมพ์$และกด Return ระบบจะประเมินผลเป็นฟังก์ชันหากโหลด jQuery $("#configform")ลองถัดไป Reveal in Elements panelคลิกขวาบนผลและเลือก
ic3b3rg

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