.reset()メソッドでjQueryを使用してフォームをリセットする方法


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>

それはおそらく理由の1つでしょうか?


機能しない例を挙げていただけますか?リセットされるフィールドはありますか?
アルンPジョニー2013年

それのこのような何かが、それは罰金ここで働いているjsfiddle.net/chJ8Bをおそらく、スクリプトの他の部分:(しかし、私は唯一の1の形式がありますか?
yvonnezoe

私の質問は、どのフィールドもリセットされていないか、一部が機能しているかどうかです
アルンPジョニー

13
HTMLが無効です。フォームをTBODY要素の子にすることはできません。また、TRをFORM要素の子にすることもできません。フォームタグをテーブルの外側に配置します(つまり、テーブルをフォームに配置します)。フォームがテーブルの外に移動されている可能性がありますが、フォームコントロールはセル内に留まっているため、フォーム内にありません。
RobG 2013年

@RobG:O良い点!やってみます。ありがとうございました!ここに戻ってフィドルリンクを取得しないと、この便利なコメントを見逃していた可能性があります
。s– yvonnezoe

回答:


464

あなたはtrigger()リファレンスリンクを使用してみてください

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

2
単に魔法的で簡単です!共有してくれてありがとう。
Ajay Kumar

投票者の皆様、私の回答を改善できるように、投票の理由を教えてください。
SagarPPanchal

$( '。profile_img_form')。trigger( 'reset');を使用しています。私はフォームにprofile_img_formという名前のクラスを追加して、それを呼び出しました。それは私のフォームをリセットせず、Uncaught SyntaxError:Invalid regular expression:/(^|\.)bs\.(?:.*\.|)fileinput(\.|$)/のようなエラーメッセージを返しません:問題。ありがとう。
Kamlesh

@Kamlesh動作するはずです。デモを作成しました。jsfiddle.net
Lkt4eq9y / 2を

1
答えてくれてありがとう。グーグルの時間を節約/ SO'ing :)
Anjana Silva

276

http://jsfiddle.net/8zLLn/

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

それをJSフィドルに入れてください。意図したとおりに機能しました。

したがって、前述の問題のいずれもここでは誤りではありません。たぶん、IDの競合問題が発生していますか?クリックは実際に実行されていますか?

編集:(私は適切なコメント機能のない悲しい袋なので)コードで直接問題になることはありません。現在使用しているページのコンテキストから外すと正常に機能します。そのため、特定のjQuery / javascriptと属性付きフォームデータを持つものではなく、別の何かである必要があります。私はその周りのコードを二分し始め、それがどこで起こっているかを見つけようとします。つまり、「確認」するために、できると思います...

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

クリック機能で、正しいフォームをターゲットにしていることを確認してください...

もしそうなら、それはここに記載されていないものでなければなりません。

編集パート2:(正しくターゲット設定していない場合)試すことができる1つのことは、使用しているものの代わりに「input:reset」を使用することです。実際のクリックがターゲティングしているもの。firebug /開発者ツールを開いて、あなたを動かし、投げ入れてください

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

何がポップアップするか見てください。そこから行くことができます。


競合するIDはありません:(レイヤー
ごと

1
クリックが機能しないようです。$('#ptest').html("clicked reset")click(function(){});に追加しました 「クリックされたリセット」が表示されるはずですが、表示されませんでした
yvonnezoe 2013年

ここで質問があります。console.logを使用するたびに、どこに注意を払えばよいかわかりません。Python IDLEとターミナルを使用してpythonスクリプトを実行しています。JavaScriptが含まれています。とにかく、 `alert($( '#configform')[0])を使用すると、[object HTMLFormElement]
yvonnezoe 2013年

1
alert(JSON.stringify($ '#configform')[0]))を使用してみてください。Alertはオブジェクトをきれいに印刷する(またはその内容を通知する)にはあまり注意を払っていません。それがオブジェクトであることを知らせるだけです。
FullOnFlatWhite 2013年

1
@DylanChensky jQueryの魔法は、すべてがセット(配列)であることです。jQueryで通常の配列を使用しているかのように[0]、最初の要素が選択されます。しかしjQueryでは、要素の実際のhtmlを選択します。したがって、[0]はhtmlを提供します。これにより、jQueryではなくhtmlを呼び出すことができるメソッドが呼び出されresetます。詳細については、以下の@kevinの回答を参照してください。
FullOnFlatWhite 2016

110

この記事によると、ここで、jQueryのには持っていないreset()方法を。しかし、ネイティブJavaScriptはそうします。したがって、次のいずれかを使用してjQuery要素をJavaScriptオブジェクトに変換します。

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

1
それは機能し、私は同意します、jQueryにはreset()メソッドがありません。ネイティブJavaScriptでそれを行う方法は、w3school docで確認できます。w3schools.com
jsref

2
これはフォームをリセットするだけで、クリアしないことに注意してください。つまり、リクエストでフォームに送信された値がある場合、それらの値が復元されます。
プロテクター1

プレースホルダー、フォームの最初のレンダリング、フォーム要素にプレースホルダーの値があるというコメントを追加したいのですが、このリセット後、プレースホルダーは再び表示されますが、値は空白になります。フォームの検証中は十分注意してください。プレースホルダー値がデフォルトであることを確認するために、汎用フォーム検証を追加していました。
Ramratan Gupta

48

これは、jQueryよりもバニラJavascriptで実際に簡単にできることの1つです。jQueryにはresetメソッドはありませんが、HTMLフォーム要素にはメソッドがあるため、次のようなフォームのすべてのフィールドをリセットできます。

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

jQueryを介してこれを行う場合(他の回答:を$('#configform')[0].reset()参照)、は、[0]を介して直接取得するのと同じフォームDOM要素をフェッチしますdocument.getElementById。後者のアプローチはより効率的でシンプルですが、jQueryのアプローチでは最初にコレクションを取得してから要素をフェッチする必要があるため、通常のJavascriptでは要素を直接取得します。


23

リセットボタンはスクリプト(または名前やID)をまったく必要としません。

<input type="reset">

これで完了です。ただし、本当にスクリプトを使用する必要がある場合は、すべてのフォームコントロールに、そのフォームを参照するフォームプロパティがあるので、次のようにすることができます。

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

ただし、リセットボタンの方がはるかに適しています。


u単にその行で十分か?oOだから私の上のHTMLは正しいですか?
yvonnezoe 2013年

「機能しない」と定義します。どのようなエラーが発生しますか?何が機能していませんか?リセットボタンはHTMLフォームの一部であり、機能します。
RobG 2013年

1
「機能しない」-何もリセットされず、フォームに変更はありませんでした。
yvonnezoe 2013年

1
「リセット」は「私のフォームがクリアされた」という意味ではないことに注意してください。「リセット」のセマンティクスが実際に行うことは、すべての「フォーム」要素を元の「値」属性に戻すことです。それは少なくとも数分間私を混乱させました!
-jocull

@jocull-他のすべてが失敗した場合、HTML標準のW3CまたはWHATWGバージョンが常に存在します。;-)
RobG 2016年

21

ようやく問題を解決しました!! @RobGはformタグとtableタグについて正しかった。タグは、テーブルの外側に配置されるべきです。それと、form

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

jqueryやその他の必要なしに動作します。ボタンをクリックするだけで、tadaa〜フォーム全体がリセットされます;)素晴らしいです!


3
通常、これが発生していることを確認するには、ソースコードを調べます(ページソースを表示しないでください。生成されたものは表示されますが、デベロッパーツール<kbd> F12 </ kbd>などを使用してください)。ブラウザが見る」-この場合、(少なくともChromeでは)タグがの先頭で自動的に閉じられていることを示します(入力要素を除く)。formtbody
drzaus 14



13

jquery関数.closest(element)および.find(...)を使用する

要素を取得し、を探します。

最後に、必要な機能を実行します。

$("#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

2番目はselect2をリセットします

オプション:異なるイベントに異なるタイプが登録されている場合、これを使用できます

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

5

このjQueryリセット関数を使用すると、フォームフィールドをすばやくリセットできます。

成功の応答が得られたら、コードの下で実行します。

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


4

次のように、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の要素で.click()関数を使用します

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

およびフォームがリセットされます注:cssを使用して、id = resetformでリセットボタンを非表示にすることもできます。

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

それを隠すことを忘れないでください...よりモダンな形にするためです。<input type = 'reset' id = 'resetform' value = 'reset' / style = 'display:none;'>
マンガ

3

Jqueryを使用した簡単なソリューションを次に示します。グローバルに機能します。コードを見てください。

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

リセットする必要があるすべてのフォームのボタンに明確なクラスを追加します。例えば:

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

3

jQueryにreset()メソッドがありません。しかし、ネイティブJavaScriptはそうします。したがって、次のいずれかを使用してjQuery要素をJavaScriptオブジェクトに変換します。

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

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

私たちは単にJavaScriptコードを使用するかもしれません

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

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

私が考えることができる最も簡単な方法はそれが堅牢です。formタグ内に配置します。


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。それで問題が解決した場合は、問題を特定しています。


他に考えられる唯一の問題は、同じID(configform)を持つ別のフォームがあることです。コンソールを使用して調査を行う必要があります。まずお試しください$。Chromeを使用している$場合、jQueryが読み込まれていれば、コンソールに入力すると状況依存リストがアクティブになります。入力$してReturn キーを押すと、jQueryがロードされている場合は関数として評価されます。次にお試しください$("#configform")。結果を右クリックして、を選択しますReveal in Elements panel
ic3b3rg 2013年

ありがとうございます:)しかし、私はクロムを持っていません。Firebugを使用してそれを行うのと同じ方法ですか?(私はそれをインストールしましたが、以前は使用していません)
yvonnezoe 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.