LoginSignup
1
1

More than 5 years have passed since last update.

jqueryのDatepickerのイベント終了時にajaxでDBを更新したい

Posted at

実現したいこと

  • クリック時に.datePickerを表示
  • 入力欄に不要な文字は入力出来ないようにする
  • 日付を選択 or 入力欄をクリア(=deleteキー押下)したタイミングでajax処理が走る
  • ajax先でDBのカラムを更新する

datePickerのイベント監視箇所について

  • 日付選択時
  • 入力欄でdeleteキーが押された時

実装


$(document).ready(function(){
    $('.input-text').keypress( function() {
        // 半角入力させない
        return false
    }).datepicker({
        "dateFormat": 'yy-mm-dd',
        onSelect: function(dateText) {
            // 日付選択時/deleteキーが押されて._clearDate()が走った時 実行
            save($(this), dateText); //-> 実行したい処理
        }
    }).keyup(function(e) {
        // deleteキーが押された場合に実行
        if(e.keyCode === 8) {
            $.datepicker._clearDate(this);
        }
    });
});

//**
//  ajax処理(→対象のControllerのメソッドでカラム更新)
//**
function save(elm, value){
    let url = location.pathname + "/" + $(elm).attr("data-cid");
    let key = $(elm).attr("data-key");
    $.ajax({
        url: url,
        type: "PATCH",
        data: {
            key : key,                   // モデルの対象カラム名
            value : value,               // 設定したい値
            id: $(elm).attr("data-cid"), // 対象モデルを検索するためのid
            ajax: 'true'
        },
        dataType: "html",
        success: function(data) {
            console.log("success");
        },
        error: function(data) {
            console.log("error");
        }
    });
}

最後に

.blur()も試したが、それだと何も値変更しなくても、マウス外しただけで走るのでイベント頻度が多すぎたので不採用。

この処理の欠点は、deleteキー1回押すと入力欄全てがクリアになること。

結局のところ、クリアボタン配置するとか、bootstrapの方使えばいいやんってなりました。

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