SOFTELメモ

</> 技術者募集

【jqueryui】datepickerしたinputのclone

問題

jqueryuiのdatepickerで日付入力できるようにした要素をcloneして複製をどこかに追加したとき、日付入力できなくなってて困っているのですが。

jquery-ui-datepicker

答え

ここまでやること。

//複製して
var clone = $('あるinput').clone();
//どこかに追加して
$('どこか').append(clone);
//日付入力可能にする
clone.removeClass("hasDatepicker")    // classを削除
    .removeData("datepicker")     // 関連づけられたデータを削除
    .removeAttr("id")             // idも削除
    .unbind()                     // 関連づけられた関数を削除
    .datepicker();                // datepickerを再設定

もともとidのあった要素を複製したらidが重複するし、もともとidのなかった要素をdatepicker()すると、jqueryuiが重複しないidを付与しているので、どちらにしろidはいったん削除するか、改めて付与する。

Demo

ボタンをクリックすると、日付入力欄を含む行を複製する。

日付 メモ 複製

<table id="demo20130828">
<thead><tr><th>日付</th><th>メモ</th><th>複製</th></tr></thead>
  <tbody>
    <tr>
      <td><input type="text" class="datepicker"></td>
      <td><input type="text"></td>
      <td><input type="button" value="複製"></td>
    </tr>
    <tr>
      <td><input type="text" class="datepicker"></td>
      <td><input type="text"></td>
      <td><input type="button" value="複製"></td>
    </tr>
    <tr>
      <td><input type="text" class="datepicker"></td>
      <td><input type="text"></td>
      <td><input type="button" value="複製"></td>
    </tr>
  </tbody>
</table>

<script>
$(function(){
    $('#demo20130828 .datepicker').datepicker();
    $('#demo20130828').on('click', '[type="button"]', function(){
        var tr = this.parentNode.parentNode;
        var clone = $(tr).clone();
        $(tr).after(clone);
        $('.datepicker', clone).removeClass("hasDatepicker")
            .removeData("datepicker")
            .removeAttr("id")
            .datepicker();
    });
});
</script>

関連するメモ

コメント(2)

Panda 2015年6月3日 18:40

この問題で悩んでいたので大変助かりました。
有益な情報ありがとうございました。

noruko 2015年7月28日 17:49

勉強になりました。
ありがとうございます。