jQueryでフォームフィールドをクリアする


402

フォームのすべての入力フィールドとテキストエリアフィールドをクリアしたい。resetクラスで入力ボタンを使用すると、次のように機能します。

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

これにより、フォームのフィールドだけでなく、ページのすべてのフィールドがクリアされます。実際のリセットボタンが存在するフォームのセレクターはどのように見えますか?


パオロBergantinoのことで答えチェックアウトstackoverflow.com/questions/680241/blank-out-a-form-with-jquery
邪悪Coderの

回答:


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

49
あなたのinput[type=password]フィールドを忘れないでください。
SammyK 2013年

64
この回答は元の質問をカバーしています。必要に応じて、単にテキストフィールドよりも多くの望むものは、明らかに...コードを追加する必要があります
ShaneBlake

2
また、HTML5にはtype = password(SammyKが言ったように)以外に、type = url、type = digits、type = emailなどの入力タイプがあります。http://www.w3.org/TR/html5/forms .html#states-of-the-type-attribute
ガブリエル

6
小さなヒント:このセレクターは暗黙のtype = textに依存している入力要素を選択しません。マークアップにtype = textを明示的に含める必要があります。
当たり前

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特性取得と変更するcheckedselectedまたは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 '22

17
ラジオ、チェックボックス、または選択がある場合、これを使用しないでください(オプション1)。値が消えた後、奇妙なバグを見つけるのに多くの時間を費やします。値をそのままにした正しいバージョン:$(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val('');(Jeppe Mariager-Lamのコメントに基づく)
Konstantin Pereiaslov 2013年

8
2番目のオプションを回避する理由はありますか?
rineez 2014

6
あなたの第2の解決策は、実際の答えである
abzarak

159

これを使用すべきでない理由は何ですか?

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

17
@ pythonian29033:そして、あなたのアプローチでは、ページ上のすべてのフォームをデフォルトにリセットします...これは、通常の開発者が望んでいるものとは明らかに異なります。jQuery開発者は、セレクターをサンプルコードから適切なものに変更する必要があるという事実に注意する必要があると思います...
Sk8erPeter

8
@ Sk8erPeterページにIDを持つ複数の要素がある場合form、それは間違っています。セレクターが正しければ正しいと思いますがform、それはむしろIDセレクター#formです。
ブランドン2016

@brandones:あなたが間違っているので、あなたはあなたが返信していたことに注意を払うべきでした... :) pythonian29033が書いたコードをチェックしてください(私は以前に返信しました):$("form").trigger('reset');本当にすべての<form>要素で「リセット」イベントをトリガーします。ほとんどの場合、それは間違っている可能性があります。ただし、$("#form").trigger('reset');(元の回答に示されている)「フォーム」IDが設定されている要素(#formセレクターで到達可能)の「リセット」イベントのみをトリガーします。そして、はい、1つのidは1回だけ使用する必要があります。これが、1つの要素を明確に識別するため、「id」と呼ばれる理由です。
Sk8erPeter

61

これは、フォーム入力フィールドのデフォルト値が空でない場合には対応しません。

のようなものがうまくいくはずです

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

私は最初の投稿からのjsコードを持っているだけで、いくつかのフォームのいくつかのリセットボタンを使用して各ページで機能させたいと思っています。したがって、何らかの貢献が必要なのはセレクタにすぎません。
tbuehlmann

51

セレクターを使用して値を空の値にすると、フォームがリセットされず、すべてのフィールドが空になります。リセットは、サーバー側からのフォームのロード後、ユーザーからの編集アクションの前と同じようにフォームを作成することです。「username」という名前の入力があり、そのユーザー名がサーバー側から事前入力されている場合、このページのほとんどのソリューションは、その値を入力から削除し、ユーザーが変更する前の値にリセットしません。フォームをリセットする必要がある場合は、次のようにします。

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

フォームをリセットする必要はないが、空の値など、すべての入力に何らかの値を入力する場合は、他のコメントのほとんどの解決策を使用できます。


29

シンプルですが魅力のように機能します。

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

14
ただし、フィールドはクリアされません。それらをデフォルトに設定します。
マークフレイザー

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 '15 / 06/15

このためにJavaScriptが必要になることがよくあるもう1つの理由があります。フォームは「フォーム」ではない場合があります。たとえば、フォームは実際には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')。trigger( "リセット");

私が試したところ、うまくいきました。

注:これらのメソッドは、ページのロード時にサーバーによって設定された初期値にのみフォームをリセットすることに注意することが重要です。これは、ランダムな変更を行う前に入力が値「set value」に設定されていた場合、フィールドは、resetメソッドが呼び出された後に同じ値にリセットされることを意味します。

それが役に立てば幸い


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

フォームeditPOIFormid属性はどこですか。


2
1つしか存在しない#editPOIFormため、この.each()方法は意味がありません。このIDを複数のフォームに追加しても、返されるのはそのうちの1つだけです。
Kevin Beal

1
each()を使用すると、($(this)の代わりに)thisを使用して、基になるDOMオブジェクトを取得し、reset()を呼び出すことができます。すべてをクリアするのではなく、デフォルト値にリセットしたい場合、これは良い解決策です。
Dave

@Dave Mightも使用するだけ$('#editPOIForm').get(0).reset();
Thomas

2
@ThomasDaugaard:get(0)または単に$( '#editPOIForm')[0]を使用する場合、$( '#editPOIForm')がどの要素にも一致しない場合、スクリプトエラーが発生しますが、each()は失敗しますが、エラー。したがって、エラー処理に関する限り、それはあなたの優先順位に依存すると思います。
デイブ


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以外のフィールドをクリアしたい場合は、平均時間のドロップダウンボックスを特定の値、つまり「すべて」にリセットします。残りのフィールドは空のテキストボックスにリセットする必要があります。このアプローチはクリアに使用されます私たちの要件として特定のフィールド。

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

1つの質問:ボタンをクリックするのではなく、プログラムで行う場合、これを特定のフォームにどのように転送しますか?
RationalRabbit

4

私はこれを使います:

$(".reset").click(function() {
  $('input[type=text]').each(function(){
     $(this).val('');
  });
});

そして、これが私のボタンです:

<a href="#" class="reset">
  <i class="fa fa-close"></i>
     Reset
</a>

使用可能なリセット入力タイプがありますw3.org/TR/html-markup/input.reset.html
Thomas Welton

3

jQueryによって通常のリセット関数を呼び出したい場所でこのコードを使用する

setTimeout("reset_form()",2000);

そして、この関数をサイトのjQueryに書き込みます

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

3

ラジオなどのデフォルトの「チェック済み」ステータスがクリアされたと不平を言っている人もいます... .notに:radio、:checkboxセレクターを追加するだけで問題は解決します。

他のすべてのリセット関数を機能させることができない場合、これは機能します。

  • 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" ClearInput" という名前のJavaScript関数を呼び出す操作の

    <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

accountType以外のすべてのフィールドをクリアしたい場合は、以下を使用します。

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

1
あなたは、この1つは良い解決策ではないラジオボタン専用のチェックボックスの値を失うが、唯一、それらをオフにしたくない
Frankey

0

ここと関連するSOの質問で私が見るコードは不完全なようです。

フォームをリセットするということは、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リクエスト処理(キャプチャ)を含むWebユーザーコントロールへの呼び出しが含まれている場合、単純なケースでは機能しません。(画像処理のために)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();
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.