[wp]ContactForm7で日時入力枠を作る

CF7にinput:datetime-localの動作を導入する。

やりたいこと

CF7には「日付」はあるけど「日時」がない。

「日時」はinput:datetime-localで実現できる。

さてどうしようね。

jsでどうにかしてしまう

typeを書き換えたらいいじゃんね。

まず、textでフォームを作成する。
判別できるようにclassをつける。

CF7の表記はわかりにくいので割愛。

<div class="datetime-local_set">
    <input type="text" name="datetime01" class="input_datetimelocal">
    <input type="text" name="datetime02" class="input_datetimelocal">
    <input type="text" name="datetime03" class="input_datetimelocal">
</div>

で、こう。

document.addEventListener('DOMContentLoaded', function () {
    const inputs = document.querySelectorAll('div.datetime-local_set input.input_datetimelocal[type="text"]');
    inputs.forEach(function(input) {
        input.type = 'datetime-local';
    });
});

jQueryだとこんな感じ。

$(function(){
    $('div.datetime-local_set input.input_datetimelocal[type="text"]').attr('type', 'datetime-local');
})

手っ取り早くていいのだけど、ページ表示からjs反映までにラグがある。
表示が一瞬変わるし、inputの高さが崩れたりすると画面がガクガクして気持ち悪いことになるので注意。

jquery.datetimepickerを使う

DateTimePicker
DateTimePicker Best Period Picker search DateTimePicker jQuery plugin select date and time Use this plugin to unobtrusiv...

jQueryプラグインでやってしまう例。

これもCF7を改造しなくても実現できる。

良かったですね。

input:textはそのままに、アクティブになったら日時のポップアップが表示される。
input:datetime-localは直接入力ができたりカレンダーから選択したりする。そこらのフォームで導入されてるものを見たことがないので、初見だとわかりにくい。
一般に普及してるとは考えにくいのでユーザーが困るかもしれない。
それにplaceholderが使えなかったりする。
使用環境がスマホ縛りなら問題ないんだけどね。

input:datetime-localのダメなところを解消できるので嬉しいですね。

だけど、日時指定のポップアップはスマホに最適化されないっていうデメリットと言うかリスクがある。ポップアップ自体はHTMLで組まれているのでCSSでどうにかできるけど、手間がすごいので微妙という面がある。

どっちを取るかですね。

こんな感じ。

<head>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.6.3.js?ver=6.7.2" id="jQuery-js" integrity="sha256-nQLuAZGRRcILA+6dMBOvcRh5Pe310sBpanc6+QBmyVM=" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.css">
    <script>
    $(function(){
        if($('input.input_datetime').length){
            $('input.input_datetime').datetimepicker();
        }
    })
    </script>
</head>
<body>

<input type="text" name="datetime01" class="input_datetimelocal" readonly>
<input type="text" name="datetime02" class="input_datetimelocal" readonly>
<input type="text" name="datetime03" class="input_datetimelocal" readonly>

</body>

年月日と時間を分けるなら

他のjQueryプラグインに「pickadate.js」というのがある。

なかなかにでかいからスマホからの操作が快適になる。

その代わりに年月日と時間を別個に用意することになる。

さしたる問題はないので、これでもいい気がする。

だけどjQuery1系なんだよな、大した問題じゃないけど。

jQuery UIもあるんだけど

既存機能だと年月日だけになるので、時間も選べるように拡張機能を追加する感じになる。

jQuery UI DatePickerに時間を入力できる機能を追加する方法解説
jQuery UI DatePickerには時間を入力する機能はないが、いくつかの JSファイルを追加し「datetimepicker」と書くだけで簡単に時間も入力できるようになる。その導入方法とさらなるカスタマイズ方法について解説。

jQuery UIもまあ嫌いじゃないんだけど、色々ある中の一部しか使わないって考えたらもったいないというかなんというか。

コメント

タイトルとURLをコピーしました