Javascript
select2をJQueryでcloneしよう!
ぽんて
公開日:2022/10/31
今回はselect2についてです。皆さん使ったことありますか?
このツールかなり便利で僕もしょっちゅう使っているのですが、少し変わったことをしようとすると
沼に落ちることがあります。
その沼にはまったときの一例を紹介したいと思います。
皆さんは同じ沼にはまりませんように。
select2をcloneする方法
ソースは以下のとおりです。
コピペで動くはずです。
HTML
1 2 3 4 5 6 7 8 |
<select class="test form-select select2-hidden-accessible" id="test" style="width: 350px"> <option value="1">晴れ</option> <option value="2">くもり</option> <option value="3">雨</option> </select> <div> <input type="button" class="clone" value="クローンする"> </div> |
javascript
1 2 3 4 5 6 7 |
$('.clone').click(function() { $('.test').select2("destroy"); $('#test').clone(true).insertBefore("#test"); $('.test').select2({ theme: 'bootstrap-5', }); }); |
これで「クローンする」ボタンを押下するとselectボックスが追加される、
といった動きの画面ができあがります。
select2のクローン時は、まずdestroyを行った後に再度select2関数で初期化する必要があるようです。
と、ここまではネット検索で少し調べれば見つかる方法です。
ただ、僕の場合はこの通りに書いても意図した動作をしてくれませんでした。。
上記の方法でうまくいかなかった方へ
意図した動作にならなかったのはCDNのバージョンによる影響でした。
うまくいかなかったパターン
1 2 3 4 5 6 7 8 9 |
<!-- Styles --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.rtl.min.css" /> <!-- Scripts --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.0/dist/jquery.slim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.full.min.js"></script> |
うまくいったパターン
1 2 3 4 5 6 7 8 9 |
<!-- Styles --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.rtl.min.css" /> <!-- Scripts --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.0/dist/jquery.slim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/select2@4.0.0/dist/js/select2.full.min.js"></script> |
さて、違いはなんでしょうか。
そうです、script内の@4.0.13を@4.0.0に変更しただけです。
まとめ
答えはシンプルでしたがたどり着くまでになかなか苦労しました。
何はともあれ解決できてよかったよかった。