クリックされた特定のリンクに基づいてページの背景色を変更する非常に単純な関数がありますが、なぜ機能しないのかわかりません。
ここに私がこれまでに持っているもののデモがあります: http://jsfiddle.net/cF74Y/
些細なミスに違いないように見えますが、見当たりません。どんな助けでも大歓迎です。
クリックされた特定のリンクに基づいてページの背景色を変更する非常に単純な関数がありますが、なぜ機能しないのかわかりません。
ここに私がこれまでに持っているもののデモがあります: http://jsfiddle.net/cF74Y/
些細なミスに違いないように見えますが、見当たりません。どんな助けでも大歓迎です。
文字列を数値と比較しています。変更switch (currentItem)
するswitch (+currentItem)
と、デモが機能します。
追加:currentItem
グローバル変数を使用する代わりに、をパラメーターとして渡すことができ
あなたは物事を複雑にしすぎていると思います。これだけできませんか?
html:
<ul id="nav">
<li><a class="color" href="#">red</a></li>
<li><a class="color" href="#">green</a></li>
<li><a class="color" href="#">blue</a></li>
<li><a class="color" href="#">yellow</a></li>
</ul>
jQuery:
$('a.color').click(function(){
$('body').css('background-color', $(this).text());
});
デモ: http://jsfiddle.net/elclanrs/8yev9/
編集:そして、配列を使用してインデックスで色を割り当てる必要がある場合、その醜いステートメントは必要ないと思います。switch
私にはかなり役に立たないようです。そのコードはすべて、これだけに減らすことができます:
var colors = ['red', 'blue', 'green', 'yellow'];
$('a.color').click(function(){
$('body').css('background-color', colors[$(this).parent().index()]);
});
これを試して:
var index = parseInt($(this).attr('id'),10);
その後、それは動作します。
理由: .attr() 関数の戻り値の型が文字列で、常に true ケース 1 になります。parseInt 関数を使用するだけです。
たぶん、関数呼び出しでパラメータ'currentItem'を指定する必要があります。
changeBg(currentItem); // call
そして、あなたの関数は次のようになります:
function changeBg(currentItem) {
var bg = 'null';
switch (currentItem) {
case 1 :
bg = '#6A6A6A';
[..]
ここに作業コピーがあります
ケースと比較するために使用parseInt
します。これでは比較できません。フィドルを参照してください。
http://jsfiddle.net/cF74Y/43/