1

私はこのコードを持っています:

$("#Editing").click(function(){
  if ($(this).attr("class","OptionsOpt-On")) 
    {$(this).attr("class","OptionsOpt-Off"); Edit = false;}

  else if ($(this).attr("class","OptionsOpt-Off")) 
    {$(this).attr("class","OptionsOpt-On"); Edit = true;}
});

私が見つけたものはすべて、自分のコードにないと特定したコードに問題があったため、検索しましたが、同様の回答を見つけることができませんでした。なぜ「else if」が機能しないのかわかりませんが、if に変更すると問題なく機能します...

4

2 に答える 2

4

attr2 つの引数を持つ = セッター = 常に真の値である jQuery オブジェクトを返します。

これをゲッターとして使用し、比較を行う必要があります。

if ( $(this).attr("class") === 'OptionsOpt-On' ) {
//...

.hasClass()この場合、より適切かもしれませんが:

if ( $(this).hasClass('OptionsOpt-On') ) {
    //...
} else {
    //...
}

要素は両方のクラスを同時に持つことはできないため、. に秒は必要ありませifelse


また、要素がいずれかのクラスで始まると仮定する.toggleClass()と、条件文を必要とせずに両方のクラスを切り替えるために使用できます。

$("#Editing").click(function(){
    $(this).toggleClass('OptionsOpt-On OptionsOpt-Off');
    Edit = $(this).hasClass('OptionsOpt-On');
});

フィドル

于 2013-04-14T23:16:07.283 に答える
1

多分あなたはこれをやろうとしています:

if ($(this).attr("class")=="OptionsOpt-On")

引数が 2 つの場合、この.attr関数はセッターとして機能し、引数が 1 つだけの場合はゲッターとして機能します。

于 2013-04-14T23:15:53.623 に答える