###やりたいこと
元々はボタンを二つ並べていたのですが、今回スライド式のボタンに変更したいという案件です。
以下のスライド式オンオフのボタンをクリックした際(ON/OFFにしたい時)に、ON/OFFの実行の確認ポップアップウィンドウを出すようにしたいです。スライドの動きはCSSのみで設定しています。
参考画像の文言は却下しますか?になってますが、実際には「ON(もしくはOFF)にしますか?」と表記したい。
html
1<input id="flag" type="checkbox" class="tgl tgl-flat"> 2<label data-tg-off="OFF" data-tg-on="ON" for="flag" class="tgl-btn"></label>
###ボタン2つ並び時代のコード
元々は2つのボタンを表示していましたので、以下のような感じで2回記述して各ボタンにあてていました。しかし今回上記のようなスライド式にデザインの変更(ボタンをひとつにまとめる)を求められたため、<script>部分をどのように修正すればいいのかわからず質問している次第です。
<button class="xxx" onclick="MoveCheckRejected();">ON</button> <script> function MoveCheckRejected() { var options = { title: "ONにしますか?", buttons: { cancel: "Cancel", ok: true } }; swal(options) .then(function(val) { if (val) { window.location.href = "http://localhost/kanri/apply/rejected/135"; } else { swal({ text: "ONにしました", buttons: false, timer: 1000 // 1秒後に自動的に閉じる }); } }); } </script>
###追記
今回新しく記述したのは最初のHTMLの部分だけで(これも他ページの記述を参考)、他は前任者から引き継いだものになり把握しきっていない部分も多々ありますが、とにかく、クリック時にオンにするかオフにするかの確認をするポップアップウィンドウを出したいです。必要であれば全て書き直すこともしますので、どうぞよろしくお願い致します。
css
1.tgl { 2 display: none; 3} 4 5.tgl + .tgl-btn { 6 box-sizing: border-box; 7} 8 9.tgl + .tgl-btn { 10 outline: 0; 11 display: block; 12 width: 8em; 13 height: 2em; 14 position: relative; 15 cursor: pointer; 16 -webkit-user-select: none; 17 -moz-user-select: none; 18 -ms-user-select: none; 19 user-select: none; 20} 21 22.tgl + .tgl-btn:after, 23.tgl + .tgl-btn:before { 24 position: absolute; 25 display: block; 26 content: ""; 27 width: 50%; 28 height: 100%; 29 top: 0; 30} 31 32.tgl + .tgl-btn:after { 33 content: attr(data-tg-off); 34} 35 36.tgl + .tgl-btn:before { 37 content: attr(data-tg-on); 38} 39 40.tgl + .tgl-btn:after { 41 left: 0; 42} 43 44.tgl:checked + .tgl-btn:after { 45 left: 50%; 46} 47 48.tgl:checked + .tgl-btn:after { 49 left: 50%; 50 content: attr(data-tg-on); 51} 52 53.tgl-flat:checked + .tgl-btn:after { 54 left: 50%; 55 background: #cfcfcf; 56 content: attr(data-tg-off); 57} 58 59.tgl-flat + .tgl-btn { 60 padding: 0; 61 transition: all .2s ease; 62 background: #fff; 63 border: 1px solid #f3f3f3; 64 border-radius: 2em; 65 color: #ffffff; 66 font-size: 1.2rem; 67 line-height: 2em; 68 text-align: center; 69} 70 71.tgl-flat + .tgl-btn:after { 72 transition: all .2s ease; 73 background: #8accff; 74 content: ""; 75 border-radius: 1em; 76 content: attr(data-tg-on); 77} 78 79.tgl-flat + .tgl-btn:after { 80 content: attr(data-tg-on); 81}
##追記-現状(11.01時点)
x_xさんに教えていただいたもので以下の通り記述したのですがポップアップされず、
何が間違っているかも分からない状態です。
<input id="flag" type="checkbox" class="tgl tgl-flat"> <label data-tg-off="OFF" data-tg-on="ON" for="flag" class="tgl-btn"></label> <script> document.querySelector('#flag').addEventListener('change', function(event) { var target = event.target; var checked = target.checked; var options = { title: (checked ? 'OFF' : 'ON') + "にしますか?", buttons: { cancel: "Cancel", ok: true } }; swal(options) .then(function(val) { if (val === null) { target.checked = !checked; } }); }, false); </script>
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー