Railsでdatetime_selectを操作

Railsでdatetime_selectを操作してみる。

一括でdisabled

jQueryでidの先頭一致を使って一括でdisabledにする。

$('[id^="xxx_yyy_"]').prop('disabled', true);

今日の日時を設定

:include_blank=>true指定がある場合で、空の要素の箇所だけ設定する。

function setVal(obj, val){
    if(obj.val() != "") return;
    obj.val(val);
}

Dateを取得して、その値を設定する。時間部は0埋め2桁なのでsliceで取得する。

now = new Date();
setVal($('#xxx_yyy_1i'), now.getFullYear());
setVal($('#xxx_yyy_2i'), now.getMonth()+1);
setVal($('#xxx_yyy_3i'), now.getDate());
setVal($('#xxx_yyy_4i'), ("0"+now.getHours()).slice(-2));
setVal($('#xxx_yyy_5i'), ("0"+now.getMinutes()).slice(-2));

時間部を表示/非表示

時のxxx_yyy_4i、分のxxx_yyy_5iを表示show/非表示hideで切り替えるが、コントロールだけ消してもセパレータが残る。

表示
$('#xxx_yyy_4i').show();
$('#xxx_yyy_5i').show();
非表示
$('#xxx_yyy_4i').hide();
$('#xxx_yyy_5i').hide();

上のようにすると、下のような表示になる。

[  ▼][  ▼][  ▼] — [  ▼] : [  ▼]
                      ↓ セパレータが残る
[  ▼][  ▼][  ▼] — :

セパレータは:datetime_separatorと:time_separatorで任意の文字が指定できるが、タグも指定できるようになっているので、spanタグでnameを指定して表示/非表示を切り替える。

:datetime_separator=>"<span name='datetime_separator'>&mdash;</span>",
:time_separator=>"<span name='datetime_separator'>:</span>"

指定したnameを使って一括で表示/非表示を切り替える。

表示
$('[name="datetime_separator"]').show();
非表示
$('[name="datetime_separator"]').hide();