チェックボックスがオンまたはオフの場合、チェックボックスの親要素のCSSを変更する
-
05-07-2019 - |
質問
基本的に、td要素内にチェックボックスがあり、チェックボックスがチェックされているときは1つの背景色を、チェックボックスがオフのときは別の背景色を使用します。つまり、チェックされているかどうかを強調したいのです。
ここと同じソリューションを使用しようとしました: Jqueryトグルイベントがチェックボックスの値に干渉している
しかし、何らかの理由で動作しません。
$(document).ready(function(){
$("input:checkbox").change(function() {
if($(this).attr("checked") === "true") {
// CHECKED, TO WHITE
$(this).parent().css({"background" : "#ffffff", "-moz-border-radius" : "5px"});
return;
}
//NOT CHECKED, TO GREEN
$(this).parent().css({"background" : "#b4e3ac", "-moz-border-radius" : "5px"});
});
});
緑色の背景色を追加しますが、削除しません。また、チェックボックスをオンのままにして更新すると、tdは白に戻り、チェックボックスを再度クリックしてオフにすると、tdの背景が緑に変わります。
私はまだこれに慣れていないので、ここで何が間違っているのかわかりません。このような単純なことですが、機能させることはできません。
解決
変更
if($(this).attr("checked") === "true")
to
if($(this).attr("checked") === true)
strict equalを使用して比較する場合、2つのデータ型は同じでなければなりません。
typeof ( $(this).attr ( "checked" ) )
boolean タイプであり、文字列と比較していることを通知します。
詳細については、比較演算子
を参照してください。他のヒント
チェックボックスがチェックされているかどうかを確認するより良い方法があります:
$(this).is(':checked')
もう少し堅牢です。
if($(this).attr(" checked")===" true")
attr
はHTML属性を読み取りません。そのように欺く。属性を読み取った場合、 checked
の文字列値は 'true'
ではなく、 'checked'
になります。しかし、それはしません。
実際に行われるのは、JavaScriptオブジェクトのプロパティを読み取ることで、プロパティ名ではなく属性名のみを使用して、それらが異なるいくつかの場所で使用します。 checked
プロパティはブール値を提供するため、何かと比較する必要はなく、次のように言うことができます。
if ($(this).attr('checked'))
またはさらに単純な、完全に同等の:
if (this.checked)
最高のものは
if($("this").is(':checked'))
{
$(this).parent().css({"background" : "#ffffff", "-moz-border-radius" : "5px"})
}
これを変更してみてください:
$(this).attr("checked") === "true"
これ:
!!$(this).attr("checked") === true
これにより、ブール値以外の値がブール値に変換され、文字列" true"が返されます(文字列falseが返された場合、trueと評価されますが...)