LoginSignup
6
5

More than 5 years have passed since last update.

【jQuery】<input type="reset">(リセットボタン)でリセットされる初期値を変更する

Last updated at Posted at 2015-09-29

フォーム・保存(Submit)・元に戻す(Reset)を組み込んだajaxを利用したフォームアプリケーションを製作した時のメモ。
元に戻すボタンを押すと保存前(読み込み後に保存していない場合は読み込み時)の値にリセットしようと考えていたのですが、本来のリセットボタンは$(selector).val()で上書きしようとしても初期値として適用してくれません。

動作はjQuery 1.11.2で確認
コード中のselectorはフォーム部品のセレクタを意味します。

15/10/01追記

全フォーム部品に対応したまとめを作成しました。
【jQuery】フォーム部品のリセット初期値を変更する(まとめ)

前提:$(selector).val() VS $(selector).attr("value")

jQueryでinputの値を取得・変更する際に$(selector).val()を使うべきか$(selector).attr("value")を使うべきかの問題はよくある話で、こちらにも投稿があります。
一般には$(selector).val()の方が良いです。

本題:<input type="reset">の問題点

フォームを簡単に初期値(value属性に指定されていた値)にリセットできる<input type="reset">はフォームのコーディングによく利用されますが、JavaScriptで書き換えた値も元に戻されてしまうという問題点がありました。(フォームをまっさらにする「クリア」については別記事を参照してください。)

リセットの初期値ごと変更するには

ここで$(selector).attr("value")を利用します。
保存(ajaxで送信)する時に同時にattrでvalue属性を書き換えると、リセットボタンを押した時に保存時の値に戻ります。

サンプルコード(初期値変更のみ)

test.html
<!DOCTYPE html>
<html>
<head>
    <script src="jquery-1.11.2.js"></script>
    <script src="script.js"></script>
</head>
<body>
    <form>
        <input type="text" id="input" value="A">
        <input type="reset" value="Reset">
        <button id="set_val">Set value to B</button>
        <button id="set_attr">Set attribute to B</button>
    </form>
</body>
</html>
script.js
$(function(){
    $("#set_val").click(function(){
        $("#input").val("B");
        return false;
    });
    $("#set_attr").click(function(){
        $("#input").attr("value", "B");
        return false;
    });
});

フォームには初期値としてAが設定されています。
Set value to Bをクリックするとフォームの値がBに変わりますがResetでAに戻ってしまいます。
Set attribute to Bをクリックすればvalue属性をBに変えてくれるのでReserをクリックするとBに変化します。
ただし、前述のリンクに書かれている通り、Set attribute to Bで変更されるのはvalue属性値だけなので見た目は変化しません。
見た目(実際のvalue)を変化させるためには$(selector).val()が必要なので注意してください。

補足

検証したところ
ロード→#set_val ⇨ valが変化(当然)
ロード→#set_attr ⇨ valも変化
ロード→#set_val→#set_attr ⇨ valは変化しない
となるようです。
attrを変更した時にvalが伴うのはロードしてから一度もvalをいじってない時限定みたいですね。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5