読者です 読者をやめる 読者になる 読者になる

知行合一

とか言ってみる

【Yii】【jQuery】【Boostrap】動的にフォームを追加時にDatepickerが表示されない

Boostrap jQuery Yii

Yiiのdynamicform
GitHub - wbraganca/yii2-dynamicform: It is widget to yii2 framework to clone form elements in a nested manner, maintaining accessibility.
を使って
Boostrapのdatepicker
bootstrap-datepicker — bootstrap-datepicker documentation
を表示させたかったんだけど、うまく表示されなかったのでメモ。

<?php DynamicFormWidget::begin([
...
    <td class="date">
    <?=  $form->field($value, "[{$index}]date") ;?></td>
...
<?php DynamicFormWidget::end(); ?>

こんな感じでフォームを追加していて

$(".dynamicform_wrapper").on("afterInsert", (function(e, item){
}

プラスボタン(フォームの追加)を押すと上の関数が呼ばれるんだけど、ここでdatepickerがクリックしても表示されないという状況。
これはクリックイベントを取得した時に$(this)を渡して

$(document).on("click",".date .form-control ", (function(){
    setDatePicker($(this));
}));

function setDatePicker(item){
    item.datepicker({
        todayHighlight: true,
        format: 'yyyy-mm-dd',
        autoclose: true,
    })
    item.datepicker('show');
}

こんな感じで'show'をしてあげないと表示されないみたい。

これで表示はされたんだけど、なぜかカッコ悪いカレンダーだったので
f:id:komu11:20160324143301p:plain
スタイルを無理やり.attr()とか.css()とかで似せて対処した。

その時に、!importantとかで指定したい時もちょっとだけ躓いたのでメモメモ。
スタイルは以下のように追加した。

    //カレンダーのスタイル修正
    var datePicker = $(".datepicker");
    var getActiveDay = $('tr').find('.active.day');

    if(getActiveDay.length === 0){
        $('.today.day').attr('style', 'background: #428BCA !important');
        $('td.today.day').css('color', '#fff');

    }else{
        $('.today.day').attr('style', 'background: #fff !important');
        $('td.today.day').css('color', '#333');
    }

    datePicker.css('text-align','center');
    datePicker.css('height', '260px');
    $('.datepicker-switch').css('text-align','center');
    $('.active.day').attr('style', 'background: #428BCA !important');
    $('td.active.day').css('color', '#fff');
    $('.prev').css('text-align','center');

完成後はこんな感じ。
f:id:komu11:20160324143650p:plain

色んなプラグインとか組み合わさってるとめんどくさい。