28

残念ながら、form.reset()関数はフォームの非表示の入力をリセットしません。FF3とChromiumにチェックインしました。

隠しフィールドのリセットを行う方法を知っている人はいますか?

4

10 に答える 10

32

それを行う最も簡単な方法は、表示することです。非表示フィールドの代わりにテキストフィールドはありません。この場合、デフォルトのリセットプロセスが定期的に行われます。

于 2010-04-01T13:14:07.917 に答える
14

残念ながら、これは標準に従って正しいです。悪いスペックはIMOを疣贅します。defaultValueそれにもかかわらず、IEは隠しフィールドにリセット可能なものを提供します。この議論を参照してください:HTML5では(alas)変更されることはありません。

(幸いなことに、フォームをリセットする必要はほとんどありません。UI機能として、一般的に眉をひそめています。)

属性の元の値をまったく取得できないため、value別の属性に複製してフェッチする必要があります。例えば。:

<form id="f">

<input type="hidden" name="foo" value="bar" class="value=bar"/>

function resetForm() {
    var f= document.getElementById('f');
    f.reset();
    f.elements.foo.value= Element_getClassValue(f.elements.foo, 'value');
}

function Element_getClassValue(el, classname) {
    var prefix= classname+'=';
    var classes= el.className.split(/\s+/);
    for (var i= classes.length; i-->0;)
        if (classes[i].substring(0, prefix.length)===prefix)
            return classes[i].substring(prefix.length);
    return '';
}

その値を密輸する別の方法には、HTML5 data、のような別の予備属性、値を読み取るtitle直後の追加JS情報、またはデフォルト値を保持するための追加の非表示フィールドが含まれる場合があります。<!-- comment -->

どのアプローチでも、HTMLを乱雑にする必要があります。一部のブラウザは、コードが実行されるまでに(リロードまたは戻るボタンを押して)記憶された値でフィールドの値をすでにオーバーライドしているため、ドキュメントの準備時にスクリプトで作成することはできません。

于 2010-04-01T14:12:21.577 に答える
6

別の答えは、誰かがここに来て探しに来た場合に備えて。ページが読み込まれた後にフォームをシリアル化し、それらの値を使用して後で非表示フィールドをリセットします。

var serializedForm = $('#myForm').serialize();

次に、フォームをリセットするには:

function fullReset(){

    $('#myForm').reset(); // resets everything except hidden fields


    var formFields = decodeURIComponent(serializedForm).split('&'); //split up the serialized form into variable pairs

    //put it into an associative array
    var splitFields = new Array();
    for(i in formFields){
        vals= formFields[i].split('=');
        splitFields[vals[0]] = vals[1];
    }
    $('#myForm').find('input[type=hidden]').each(function(){    
        this.value = splitFields[this.name];
    });

}
于 2012-09-27T18:43:32.870 に答える
4

ドキュメントの読み込み時にデフォルト値を設定してから、リセットをトラップして、非表示の子犬を元の値にリセットする方が簡単であることがわかりました。例えば、

//fix form reset (hidden fields don't get reset - this will fix that pain in the arse issue)
$( document ).ready(function() {
  $("#myForm").find("input:hidden").each(function() {
      $(this).data("myDefaultValue", $(this).val());
  });

  $("#myForm").off("reset.myarse");
  $("#myForm").on("reset.myarse", function() {
     var myDefaultValue = $(this).data("myDefaultValue");
     if (myDefaultValue != null) {
       $(this).val(myDefaultValue);
     }
  });
}

これが誰かを助けることを願っています:)

于 2014-05-22T23:10:50.750 に答える
4

jQueryを使用できます-これにより、非表示フィールドが空になります:

$('form').on('reset', function() {
  $("input[type='hidden']", $(this)).val('');
});

ヒント:csrfトークンフィールドや、空にすべきではないその他のものをリセットしていないことを確認してください。必要に応じて、要素の仕様を絞り込むことができます。

フィールドをデフォルト値にリセットする場合は、次を使用できます(テストされていません)。

$('form').on('reset', function() {
  $("input[type='hidden']", $(this)).each(function() {
    var $t = $(this);
    $t.val($t.data('defaultvalue'));
  });
});

デフォルト値をプロパティに保存しますdata-defaultvalue="Something"

于 2017-04-13T07:01:35.737 に答える
1
$('#form :reset').on('click',function(e)({
    e.preventDefault();
    e.stopImmediatePropagation();
    $("#form input:hidden,#form :text,#form textarea").val('');
});

select、checkbox、radioの場合、デフォルト値を知って(保持して)、そのイベントハンドラーでデフォルト値に設定することをお勧めします。

于 2016-01-24T11:35:52.060 に答える
0

ボタンを作成しonClick、フィールドをクリアするイベントにJavaScriptを追加します。

そうは言っても、なぜこれらのフィールドをリセットしたいのか興味があります。通常、それらには内部データが含まれています。コードでそれらをクリアすると、フォームの投稿は失敗します(たとえば、ユーザーが新しいデータを入力してフォームを送信しようとした後)。

[編集]あなたの質問を誤解しました。誰かが非表示フィールドの値を改ざんする可能性があることを心配している場合は、それらをリセットする方法はありません。たとえば、フォームを呼び出すことはできますreset()が、フォームのフィールドを呼び出すことはできません。

値をJavaScriptファイルに保存し、それを使用して値をリセットできると考えることができますが、ユーザーが非表示のフィールドを改ざんできる場合は、JavaScriptも改ざんできます。

したがって、セキュリティの観点から、非表示のフィールドをリセットする必要がある場合は、そもそもそれらを避けて、サーバー上のセッションに情報を保存してください。

于 2010-04-01T10:20:57.217 に答える
0

私のやり方は、隠しフィールドの変更イベントにイベントリスナーを配置することです。そのリスナー関数では、初期値をDOM要素ストレージ(mootoolsjquery)に保存してから、フォームのリセットイベントをリッスンして、非表示のフォームフィールドストレージに保存されている初期値を復元できます。

于 2010-04-01T10:59:34.443 に答える
0

これは行います:

$("#form input:hidden").val('').trigger('change');
于 2015-07-10T07:59:57.347 に答える
0

以下の行を使用して非表示の入力フィールド値をリセットできます。必要なのは、の代わりにフォームIDを変更することだけですfrmForm

$("#frmForm input:hidden").val(' ');
于 2018-10-30T10:15:34.737 に答える