Cách đặt lại biểu mẫu bằng jQuery với phương thức .reset ()


289

Tôi có mã làm việc có thể đặt lại biểu mẫu của mình khi tôi nhấp vào nút đặt lại. Tuy nhiên, sau khi mã của tôi dài hơn, tôi nhận ra rằng nó không hoạt động nữa.

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

Và jQuery của tôi:

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

Có một số nguồn mà tôi nên đưa vào mã của mình để .reset()phương pháp hoạt động không? Trước đây tôi đã sử dụng:

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

.reset()phương pháp đã hoạt động.

Hiện tại tôi đang sử dụng

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

Nó có thể là một trong những lý do?


bạn có thể đưa ra một ví dụ về việc không làm việc? có trường nào được đặt lại không?
Arun P Johny

nó một cái gì đó như thế này nhưng nó đang làm việc tốt ở đây jsfiddle.net/chJ8B ? :( có lẽ vì các bộ phận khác của kịch bản nhưng tôi chỉ có 1 hình thức
yvonnezoe

câu hỏi của tôi là liệu không ai trong số các lĩnh vực được tự đặt lại / một số đang làm việc
Arun P Johny

13
HTML của bạn không hợp lệ . Biểu mẫu không được là con của phần tử TBODY và ​​TR không được là con của phần tử FORM. Đặt các thẻ biểu mẫu bên ngoài bảng (tức là đưa bảng vào biểu mẫu). Rất có thể biểu mẫu đang được di chuyển ra ngoài bảng, nhưng các điều khiển biểu mẫu vẫn ở trong các ô nên chúng không còn ở trong biểu mẫu nữa.
RobG

@RobG: O điểm tốt! tôi sẽ thử điều đó. cảm ơn bạn! tôi có thể đã bỏ lỡ nhận xét này hữu ích nếu tôi không quay trở lại đây để có được liên kết fiddle tôi: s
yvonnezoe

Câu trả lời:


491

bạn có thể thử sử dụng trigger () Tham chiếu liên kết

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

2
Chỉ đơn giản là kỳ diệu và thẳng về phía trước! Rất được đánh giá cao vì đã chia sẻ.
Ajay Kumar

Các cử tri thân mến, bạn có thể vui lòng cho tôi biết lý do đằng sau số phiếu không đồng ý của bạn, để tôi có thể cải thiện câu trả lời của mình.
SagarPPanchal

Tôi đang sử dụng $ ('. Profile_img_form'). Trigger ('reset'); tôi đã thêm lớp có tên profile_img_form trên biểu mẫu của mình sau đó được gọi là nó. nó không đặt lại biểu mẫu của tôi và trả về thông báo lỗi như Uncaught SyntaxError: Biểu thức chính quy không hợp lệ: /(^|\.)bs\.(?:.*\.|)fileinput(\.|$)/: Vui lòng đề xuất điều gì là vấn đề. Cảm ơn.
Kamlesh

@Kamlesh nó nên làm việc, tôi đã tạo ra một bản demo cho bạn, click vào jsfiddle.net/Lkt4eq9y/2
SagarPPanchal

1
Cảm ơn vì câu trả lời. Giờ đã lưu trên Google / SO'ing :)
Anjana Silva

283

http://jsfiddle.net/8zLLn/

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

Đặt nó trong JS fiddle. Làm việc như dự định.

Vì vậy, không có vấn đề nào nêu trên là lỗi ở đây. Có thể bạn đang gặp sự cố ID xung đột? Nhấp chuột có thực sự đang thực thi không?

Chỉnh sửa: (bởi vì tôi là một kẻ buồn bã không có khả năng bình luận thích hợp) Nó không phải là vấn đề trực tiếp với mã của bạn. Nó hoạt động tốt khi bạn đưa nó ra khỏi ngữ cảnh của trang mà bạn hiện đang sử dụng, vì vậy, thay vì nó là một cái gì đó với dữ liệu biểu mẫu jQuery / javascript & quy tắc cụ thể, nó phải là một cái gì đó khác. Tôi sẽ bắt đầu chia nhỏ đoạn mã xung quanh nó và cố gắng tìm xem nó đang diễn ra ở đâu. Ý tôi là, chỉ để 'chắc chắn', tôi cho rằng bạn có thể ...

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

trong chức năng nhấp chuột và đảm bảo rằng nó đang nhắm mục tiêu đúng biểu mẫu ...

và nếu có, nó phải là thứ không được liệt kê ở đây.

chỉnh sửa phần 2: Một điều bạn có thể thử (nếu nó không nhắm mục tiêu chính xác) là sử dụng "input: reset" thay vì những gì bạn đang sử dụng ... ngoài ra, tôi đề xuất vì nó không phải là mục tiêu hoạt động không chính xác để tìm hiểu những gì nhấp chuột thực sự đang nhắm mục tiêu. Chỉ cần mở firebug / công cụ dành cho nhà phát triển, bạn có gì, tung ra

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

và xem những gì bật lên. và sau đó chúng ta có thể đi từ đó.


không mâu thuẫn ID :( Tôi đang cố gắng để chọn lớp, từng lớp và kiểm tra xem các công trình nhấp chuột
yvonnezoe

1
hmm có vẻ như nhấp chuột không hoạt động! tôi đã thêm $('#ptest').html("clicked reset")vào lần nhấp (function () {}); nơi nó sẽ hiển thị "đã nhấp đặt lại" nhưng nó không hiển thị
yvonnezoe

Tôi có một câu hỏi ở đây. mỗi khi tôi sử dụng console.log, tôi không biết phải tìm nó ở đâu. tôi đang sử dụng Python IDLE và một thiết bị đầu cuối để chạy tập lệnh python. javascript có trong đó. dù sao, khi tôi sử dụng `alert ($ ( '# configform') [0]), nó mang lại cho tôi [đối tượng HTMLFormElement]
yvonnezoe

1
Hãy thử sử dụng cảnh báo (JSON.stringify ($ '# configform') [0])). Cảnh báo không quan tâm nhiều đến các đối tượng in ấn đẹp (hoặc cho bạn biết có gì trong đó). Nó chỉ cho bạn biết rằng đó là một đối tượng.
FullOnFlatWhite

1
@DylanChensky điều kỳ diệu của jQuery là mọi thứ đều là một tập hợp (mảng). Giống như nếu bạn đang sử dụng một mảng thông thường trong jQuery [0]chọn phần tử đầu tiên. Nhưng trong jQuery, nó chọn html thực của phần tử. Vì vậy, [0]cung cấp cho bạn html, cho phép bạn gọi phương thức html, không phải jQuery, được gọi reset. Xem câu trả lời của @kevin bên dưới để biết thêm thông tin.
FullOnFlatWhite

111

Theo bài đăng này ở đây , jQuery không có reset()phương thức; nhưng JavaScript gốc thì có. Vì vậy, hãy chuyển đổi phần tử jQuery thành một đối tượng JavaScript bằng cách sử dụng:

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

1
Nó hoạt động và tôi đồng ý, jQuery không có phương thức reset (). Bạn có thể xem làm thế nào để làm điều đó với JavaScript có nguồn gốc tại w3school doc: w3schools.com/jsref/met_form_reset.asp
serfer2

2
Tôi muốn lưu ý rằng điều này sẽ chỉ đặt lại biểu mẫu, không xóa nó. Tức là, nếu biểu mẫu có các giá trị được gửi cùng với yêu cầu, những giá trị đó sẽ được khôi phục.
Người bảo vệ một

Tôi muốn thêm nhận xét về trình giữ chỗ, hiển thị ban đầu của biểu mẫu, các phần tử biểu mẫu có giá trị của trình giữ chỗ, sau khi đặt lại này, bất kể trình giữ chỗ được hiển thị lại nhưng giá trị trở nên trống, vì vậy hãy cẩn thận trong khi xác thực biểu mẫu. Tôi đã thêm xác thực biểu mẫu chung để kiểm tra giá trị giữ chỗ là mặc định.
Ramratan Gupta

49

Đây là một trong những thứ thực sự được thực hiện trong Javascript vani dễ dàng hơn jQuery. jQuery không có resetphương thức, nhưng Phần tử biểu mẫu HTML thì có, vì vậy bạn có thể đặt lại tất cả các trường trong một biểu mẫu như sau:

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

Nếu bạn thực hiện việc này thông qua jQuery (như đã thấy trong các câu trả lời khác ở đây $('#configform')[0].reset():), thì [0]nó đang tìm nạp phần tử DOM cùng dạng mà bạn sẽ nhận trực tiếp qua document.getElementById. Tuy nhiên, cách tiếp cận thứ hai vừa hiệu quả hơn vừa đơn giản hơn (vì với cách tiếp cận jQuery, trước tiên bạn nhận được một tập hợp và sau đó phải tìm nạp một phần tử từ nó, trong khi với Javascript vani bạn chỉ lấy phần tử trực tiếp).


23

Nút đặt lại hoàn toàn không cần bất kỳ tập lệnh nào (hoặc tên hoặc id):

<input type="reset">

và bạn đã hoàn thành. Nhưng nếu bạn thực sự phải sử dụng script, hãy lưu ý rằng mọi điều khiển biểu mẫu đều có thuộc tính biểu mẫu tham chiếu đến biểu mẫu mà nó ở trong đó, vì vậy bạn có thể làm:

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

Nhưng nút đặt lại là một lựa chọn tốt hơn nhiều.


ý bạn chỉ đơn giản là dòng đó sẽ làm gì? oO vậy html của tôi ở trên có đúng không?
yvonnezoe

Xác định "không hoạt động". lỗi gì bạn nhận được? Cái gì không hoạt động? Các nút đặt lại đã mãi mãi là một phần của biểu mẫu HTML, chúng hoạt động.
RobG

1
"không hoạt động" - nó không đặt lại bất cứ điều gì, không có thay đổi nào được nhìn thấy trong biểu mẫu.
yvonnezoe

1
Một điều cần lưu ý là "đặt lại" không có nghĩa là "biểu mẫu của tôi bị xóa". Những gì ngữ nghĩa của "đặt lại" thực sự làm là trả lại tất cả các phần tử "biểu mẫu" trở lại thuộc tính "giá trị" ban đầu của chúng. Điều đó khiến tôi bối rối trong ít nhất vài phút!
jocull

@ jocull — khi vẫn thất bại, luôn có phiên bản W3C hoặc WHATWG của tiêu chuẩn HTML. ;-)
RobG

21

Cuối cùng tôi đã giải quyết được vấn đề !! @RobG đã đúng về formthẻ và tablethẻ. các formThẻ phải được đặt bên ngoài bàn. với,

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

hoạt động mà không cần jquery hoặc bất kỳ thứ gì khác. chỉ cần nhấp vào nút và tadaa ~ toàn bộ biểu mẫu đã được đặt lại;) tuyệt vời!


3
bạn thường có thể xác nhận điều này đang xảy ra bằng cách kiểm tra mã nguồn (không xem nguồn trang, vì điều đó sẽ hiển thị những gì đã được tạo, mà là sử dụng một cái gì đó như Công cụ dành cho nhà phát triển <kbd> F12 </kbd>), cho bạn thấy " trình duyệt thấy "- trong trường hợp đó, nó sẽ hiển thị cho bạn (ít nhất là trong Chrome) rằng formthẻ đã được tự động đóng ở đầu tbody, ngoại trừ các yếu tố đầu vào.
drzaus



15

Dòng đầu tiên sẽ đặt lại đầu vào biểu mẫu

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

Cái thứ hai sẽ đặt lại select2

Tùy chọn: Bạn có thể sử dụng cái này nếu bạn có các loại khác nhau được đăng ký với các sự kiện khác nhau

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

13

Bằng cách sử dụng hàm jquery .closest (phần tử).find (...) .

Lấy phần tử cha và tìm kiếm phần tử con .

Cuối cùng, làm chức năng cần thiết.

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

4
Mặc dù khối mã này có thể trả lời câu hỏi, nhưng bạn luôn phải cung cấp một số giải thích cho lý do tại sao nó làm như vậy.
Sascha Wolf

1
$("#form").find("input[type=text], textarea").val("");tôi đã làm theo cách này
Bira

11

jQuery không có reset()phương thức; nhưng JavaScript gốc thì có. Vì vậy, hãy chuyển đổi phần tử jQuery thành một đối tượng JavaScript bằng cách sử dụng:

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

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

Chúng tôi chỉ có thể sử dụng mã Javascript

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

5

Có thể đặt lại nhanh các trường biểu mẫu với chức năng đặt lại jQuery này.

khi bạn nhận được phản hồi thành công thì hãy kích hoạt mã bên dưới.

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


4

Bạn chỉ có thể thêm một loại đầu vào = đặt lại với một id = biểu mẫu đặt lại như thế này

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

thì với jquery, bạn chỉ cần sử dụng hàm .click () trên phần tử có id = resetform như sau

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

và biểu mẫu đặt lại Lưu ý: Bạn cũng có thể ẩn nút đặt lại với id = resetform bằng cách sử dụng css của bạn

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

Đừng giả vờ giấu nó ... để biến nó thành một hình thức hiện đại hơn. <input type = 'reset' id = 'resetform' value = 'reset' / style = 'display: none;'>
truyện tranh

3

Đây là giải pháp đơn giản với Jquery. Nó hoạt động trên toàn cầu. Hãy xem mã.

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

Thêm một lớp rõ ràng vào một nút trong mọi biểu mẫu mà bạn cần đặt lại. Ví dụ:

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

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

Cách đơn giản nhất mà tôi có thể nghĩ ra là mạnh mẽ. Đặt trong thẻ biểu mẫu.


0

Mã của bạn sẽ hoạt động. Đảm bảo static/jquery-1.9.1.min.jstồn tại. Ngoài ra, bạn có thể thử hoàn nguyên về static/jquery.min.js. Nếu điều đó khắc phục được sự cố thì bạn đã xác định được chính xác vấn đề.


Vấn đề khác duy nhất mà tôi có thể nghĩ đến là bạn có một biểu mẫu khác có cùng id ( configform). Bạn nên thực hiện một số điều tra bằng cách sử dụng bảng điều khiển. Lần đầu thử $. Nếu bạn đang sử dụng Chrome, việc nhập $vào bảng điều khiển sẽ kích hoạt danh sách phân biệt ngữ cảnh nếu jQuery được tải. Nếu bạn nhập $và nhấn return, nó sẽ đánh giá một hàm nếu jQuery được tải. Tiếp theo hãy thử $("#configform"). Nhấp chuột phải vào kết quả và chọn Reveal in Elements panel.
ic3b3rg

cảm ơn bạn :) nhưng tôi không có chrome. nó có giống cách làm điều đó bằng cách sử dụng firebug không? (Tôi đã cài đặt nó nhưng chưa bao giờ sử dụng nó trước đây)
yvonnezoe

0

Bạn có thể sử dụng như sau.

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

Sau đó, xóa biểu mẫu:

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

Có vẻ như có rất nhiều mã khung cụ thể ở đây. Tôi khuyên bạn nên tránh những điều như vậy khi trả lời các câu hỏi trên SO, vì câu hỏi không chỉ rõ rằng họ đang sử dụng bất kỳ khuôn khổ nào ngoài jQuery
Lazerbeak12345
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.