前提・実現したいこと
jQueryで入力チェックを実装しているところです。
チェックに引っかかった場合、どの入力項目がNGだったか分かるように、項目のボーダー色を変えたいです。
※対象はselectboxになります。
発生している問題
色々試しましたが意図した通りになりません。
試したこと
元々CSSでfocusするとボーダー色を変えるようにしてたので、チェックに引っかかったタイミングで、選択状態にしてみました。
選択状態にはなりますが、色は変わりませんでした。
javascript
1$("hoge").val(0);
そこで選択状態にするのはやめて、チェックに引っかかったら、色を変えてみました。
javascript
1$(".hoge").css("box-shadow","0 0 10px 0 #ff9900");
一見うまくいったように思えたのですが、この後selectboxに枠色がずっと付いたままになってしまいます。
※当然といえばそうなのですが
フォーカスが外れた時に枠色を戻すscriptを追加したら解消するでしょうが、何だか違うような気がしてます。もっとシンプルな方法はないかと悩んでいます。
整理するとやりたいイメージは、以下の通りです。
枠色を変えたいのは
・(入力時に)フォーカスが当たった時
・チェック時に引っかかった時
枠色を元の色に戻したいのは
・フォーカスが外れた時
先輩方アドバイスいただけないでしょうか?
宜しくお願い致します。
コードペン
リンク内容
該当のソースコード
html
1<script src="https://code.jquery.com/jquery-3.3.1.js"></script> 2 3<select class="minimal"> 4 <option>apple</option> 5 <option>grape</option> 6 <option>banana</option> 7</select> 8 9<button>登録</button>
css
1select { 2 /* styling */ 3 background-color: white; 4 border: thin solid #ddd; 5 border-radius: 4px; 6 display: inline-block; 7 font: inherit; 8 line-height: 1.5em; 9 padding: 0.5em 3.5em 0.5em 1em; 10 width: 100%; /*親要素いっぱい広げる*/ 11 12} 13 14/* arrows */ 15select.minimal { 16 background-image: 17 linear-gradient(45deg, transparent 50%, gray 50%), 18 linear-gradient(135deg, gray 50%, transparent 50%), 19 linear-gradient(to right, #ccc, #ccc); 20 background-position: 21 calc(100% - 20px) calc(1em + 2px), 22 calc(100% - 15px) calc(1em + 2px), 23 calc(100% - 2.5em) 0.5em; 24 background-size: 25 5px 5px, 26 5px 5px, 27 1px 1.5em; 28 background-repeat: no-repeat; 29} 30 31select.minimal:focus { 32 background-image: 33 linear-gradient(45deg, green 50%, transparent 50%), 34 linear-gradient(135deg, transparent 50%, green 50%), 35 linear-gradient(to right, #ccc, #ccc); 36 background-position: 37 calc(100% - 15px) 1em, 38 calc(100% - 20px) 1em, 39 calc(100% - 2.5em) 0.5em; 40 background-size: 41 5px 5px, 42 5px 5px, 43 1px 1.5em; 44 background-repeat: no-repeat; 45 box-shadow: 0 0 10px 0 rgba(255,153,0,1); 46 outline: 0; 47} 48 49 50select:-moz-focusring { 51 color: transparent; 52 text-shadow: 0 0 0 #000; 53}
javascript
1$('button').click(function(){ 2 $(".minimal").css("box-shadow","0 0 10px 0 #ff9900"); 3})
回答1件
あなたの回答
tips
プレビュー