2016-03-22 7 views
0

私はたくさんのリストから項目を「お気に入り」にするトグル機能の作成に取り組んでいます。私は、アイテムをユーザー固有のお気に入りリストの内外に切り替え、その変更をデータベースに伝達し、それに応じてサイトの残りの部分を移入する作業スクリプトを持っています。それはすべて正常に動作します、それは主にPHPとAjaxです。 しかし、私のjavascriptはお尻です。私は満たされた心臓から空のアイコンにアイコンを変更するために条件に固執しています。何らかの理由で、if文がfalseであっても、else文に到達することはありません。私が条件を逆にすれば、それはまだうまくいっているが、他の人は決して扱わない。javacript conditional not reach else

イメージは以下のとおりです。

<img src="includes/icons/fave-<?php echo $favStatus; ?>.png" id="faveToggle" class="faveIcon" onClick="toggleFave()"> 

)toggleFave(に位置して、条件は次のとおりです。だから、

if(document.getElementById('faveToggle').src.toString().indexOf("fave-false.png")){ 
    document.getElementById('faveToggle').src = "includes/icons/fave-true.png"; 
} else { 
    document.getElementById('faveToggle').src = "includes/icons/fave-false.png"; 
} 

、うう、私はwhuddo?

+0

'.indexOf'は' true'/'false'ではなく数字を返します。 – Pointy

+2

そして、@Pointyに加える 'ブール(-1)'は真であり、偽ではありません。 – gurvinder372

答えて

1

indexOfは、部分文字列が見つかる場所の0から始まるインデックスを返します。そうでない場合は-1を返します。 -1"truthy"になります。

つまり、2つの可能性があることを意味します。文字列内にあり、ポジティブ(真実)のポジションを持っているか、そうではなく、真実になります。-1。いずれにしても、常に最初のブロックに入ります。あなたが欲しい:

if(document.getElementById('faveToggle').src.toString().indexOf("fave-false.png") > 0){ 
1

あなたは一度だけの要素を取得する必要があります。それが見つからない場合

var toggle = document.getElementById("faveToggle"); 
if (toggle.src.indexOf("fave-false.png") >= 0) { 
    toggle.src = "includes/icons/fave-true.png"; 
} 
else { 
    toggle.src = "includes/icons/fave-false.png"; 
} 

.indexOf()機能は、検索対象のサブストリングの位置、または-1を返します。

0

bitwise not~演算子を使用して確認することができます。

は、bitwise not operatorです。あなたがcheckifでき

value ~value boolean 
-1 => 0 => false 
    0 => -1 => true 
    1 => -2 => true 
    2 => -3 => true 
    and so on 
if(~document.getElementById('faveToggle').src.toString().indexOf("fave-false.png")){ 
0

それを超える-1

if(document.getElementById('faveToggle').src.toString().indexOf("fave-false.png")>-1){ 
alert('1') 
document.getElementById('faveToggle').src = "includes/icons/fave-true.png"; 
} else { 
alert("2") 
    document.getElementById('faveToggle').src = "includes/icons/fave-false.png"; 
} 

jsfiddle

です: indexOfリターンがインデックス 0 ... nを見つけた場合や -1ない場合ので、 indexOf()での使用に最適です
0

ここは私のシムですternary operator

var toggle = document.getElementById('faveToggle'), 
    newState = toggle.src.toString().indexOf("fave-false.png") == -1 ? true : false; 

toggle.src = "includes/icons/fave-"+newState+".png";