2017-08-31 23 views
1

jQueryを使用して、jQueryをプロジェクトに追加したくないということを知りました。クリックしたラジオだけをクリックしてバックグラウンドの色を変更してください。

ブロックの内側にあるラジオボタンをクリックしたときにブロックの背景色を変更したいとします。純粋なJavascriptのみでお願いします。

私はまだそれが動作しない理由がわからないコードはここにあります。

<style> 
 
    .radio-active { 
 
    background-color: $primaryColor; 
 
    color: $whiteColor; 
 
    } 
 
</style> 
 

 
<ul> 
 
    <li id="label"> 
 
    <input id="rad" type="radio" name="rad" onclick="changeColor()"> 
 
    <label class="radio-label" for="f-option">£25</label> 
 
    </li> 
 
</ul> 
 

 
<script> 
 
    function changeColor() { 
 
    document.getElementById('label').className += "radio-active"; 
 
    console.log('hiiiiiiiii'); 
 
    } 
 

 
    function init() { 
 
    document.getElementById("rad").onclick = changeColor; 
 
    } 
 

 
    window.onload = init(); 
 
</script>

答えて

1

それはあなたの関数を呼び出すだけではなく、それはwindow.onload用のコールバックであることを割り当てているので、あなたのinit関数は、要素がレンダリングされる前に実行されていることが可能です。

のでwindow.onload = init();window.onload = init;

編集になる必要があります。また、($primaryColorのような)色変数がどこにも宣言されていないので、あなたのCSSは(静かに)失敗している可能性があります。 redblueのような通常の色で試してみてください。

他の理由でスタイルが表示されないことがあります。 display: none;のようなもっと極端なスタイルルールで試してみてください。

はまた、kukkuzのようなクラス(className += "radio-active")の追加(あなたが前後に切り替えたい場合は)そのメソッドを使用してちょうど=ない+=で行う、またはしなければならない、と述べました。あなただけのJSとまったくCSSを使用したい場合、あなたはそのようcssStringを設定することができます

function changeColor() { 
 
    document.getElementById('label').className += "radio-active"; 
 
}
.radio-active { 
 
    background-color: black; 
 
    color: white; 
 
}
<ul> 
 
    <li id="label"> 
 
    <input id="rad" type="radio" name="rad" onclick="changeColor()"> 
 
    <label class="radio-label" for="f-option">£25</label> 
 
    </li> 
 
</ul>

+0

私は試したが、まだ何も... – BeeLee

+0

コンソールにエラーがありますか?構文などに問題があるかもしれません。 – jonahe

+0

エラーなし、console.logも表示されません – BeeLee

1

あなたはclass属性にを追加していて、2回をクリックした後、それは次のようになります。その代わり

radio-activeradio-active 

することができますclassListトグル - デモ下記参照:

私はcheckboxをここのタスクに適していると考えています。

function changeColor() { 
 
    document.getElementById('label').classList.toggle("radio-active"); 
 
} 
 

 
function init() { 
 
    document.getElementById("rad").onclick = changeColor; 
 
} 
 

 
window.onload = init();
.radio-active { 
 
    background-color: lightblue; 
 
    color: white; 
 
}
<ul> 
 
    <li id="label"> 
 
    <input id="rad" type="checkbox" name="rad" onclick="changeColor()"> 
 
    <label class="radio-label" for="f-option">£25</label> 
 
    </li> 
 
</ul>

+0

はまだ動作していない、それは本当に奇妙です! – BeeLee

+0

スニペットで作業していますが...もしあれば詳細を共有してください... – kukkuz

+0

javascriptはすべてここにあります。 htmlとcssが長すぎる私はそれを投稿することができないと確信していない – BeeLee

0

あなたはこのようなあなたのコードを簡素化することができます

function changeColor() { 
 
    var cssString = 'background-color: black; color: white;' 
 
    document.getElementById("label").style.cssText = cssString; 
 
}
<ul> 
 
    <li id="label"> 
 
    <input id="rad" type="radio" name="rad" onclick="changeColor()"> 
 
    <label class="radio-label" for="f-option">£25</label> 
 
    </li> 
 
</ul>

+0

まだ動作していませんごめんなさい – BeeLee

0

<style> 
 
    .radio-active { 
 
    background-color: red; 
 
    color: white; 
 
    } 
 
</style> 
 

 
<ul> 
 
    <li id="my_label"> 
 
    <input id="rad" type="radio" name="rad" onclick="changeColor()"> 
 
    <label class="radio-label" for="f-option">£25</label> 
 
    </li> 
 
</ul> 
 

 
<script> 
 
    var changeColor = function() { 
 
    document.getElementById("my_label").classList.add("radio-active"); 
 
    } 
 

 
</script>

関連する問題