2012-03-15 5 views
2

私は理解できない興味深い問題があります。単純なjQuery if else文ですが、うまくいきません。それはなぜ機能しないのですか?jQuery if/else文CSS

コード:

$("#div").click(function(){ 

    if ($("#div2").css("background-image") === "url(img/image.png)") { 
     alert('OK'); 
    } 
    else { 
     alert('NG'); 
    } 

}); 

しかし、私は.css("background-image") === "url(img/image.png)"を変更、例えば、.css('position') === 'absolute'に、それが働いています。

+0

'$("#div2 ").css(" background-image ")'を警告(または書き込み/ログ/検査)するとどうなりますか? – GolezTrol

+0

あなたはチェックしているhtmlのスニペットを、おそらく対応するCSSを投稿できますか? – sinemetu1

+1

thats weird、 '.css( 'height')=== '絶対的な'は今まで働いていたのですか? –

答えて

0

正しい答えは、画像へのフルパスを記述することであることが表示されます。したがって、url(img/image.png)の代わりにurl(http://www.myhost.com/img/image.png)を使用してください。

4

値に微妙な違いがあります。何が起きているのかを見るためにelseステートメントの値を警告します。例えば、

if ($("#div2").css("background-image") === "url(img/image.png)") { 
    alert('OK'); 
} 
else { 
    alert($("#div2").css("background-image")); 
} 
+0

うん、 'background-image' urlは完全修飾パスを取得します。 Fiddle:http://jsfiddle.net/TKUET/ – steveax

2

私の推測では、CSSの負荷が、それはURL(IMG/image.png)とチューリングを取っているときにhttp://www.somehost.com/img/image.pngになります。したがって、.css( "background-image")はもはや "url(img/image.png)"と同じではありません。代わりに、チェックの

.css('background-image') == 'url(img/Image.png)' 

チェック

.css('background-image').indexOf("img/Image.png") != -1 
0

ただ、ここで暗闇での撮影が、 "URL(IMG/image.png)" はおそらく、URLの引数の周りの単一引用符を持っている必要があります()それは構文がCSSのために行く方法だからです。

"url('img/image.png')"

+1

パスのクォートはオプションで、一重引用符と二重引用符の両方が問題ありません。 – steveax

+0

確かに、スタイルシートのパスを宣言するときはどちらも問題ありません。しかし、ここでの質問は:$( "#div2").css( "background-image")は何を返しますか?一重引用符の有無にかかわらず文字列。これはブラウザ依存の回答かもしれないので、上記のDanielが示唆するようにindexOfを実行するのが最も安全な方法かもしれません。 – Steve

+0

少なくともFirefoxでは、フルパスが返され、二重引用符で囲まれます: 'url(" http://thesite.tld/path/to/image.png ")'(上記の私のフィドルを見てください) – steveax