0

クリックイベントでクラスを追加および削除しようとしています。これは要素を強調表示するようなものですが、ここでは何も起こりません:(。これが私のコードです:JQ:

var listed=($('.vis').size())-1,
btn=$('.compare-btn');
  listed < 5 ? listed>=2?btn.show(500):null):btn.text("more").addClass('border').setTimeout(btn.removeClass('border'),2000);

CSS:

.border{border:2px solid red;width:95%!important;}

このコードの何が問題になっているのか教えてください

4

2 に答える 2

5

setTimeoutは組み込みのJavaScriptメソッドであり、jQueryの一部ではありません。これについては、MDNの記事を参照してください。

リファクタリング

btn.text("more").addClass('border').setTimeout(btn.removeClass('border'),2000);

に:

btn.text("more").addClass('border');
setTimeout(function(){

    btn.removeClass('border');

},2000);

また、三項演算子はコードをあまり助けないと思います。少し読みにくくなっています。if-else特に戻り値を使用していない場合は、代わりに単純な構造を使用することを検討してください。

必要に応じて、jQuery .delay関数を使用して、このように試行したものと同様の構文を実行できます。ただし、引き続き使用することをお勧めしますsetTimeout。よりシンプルでネイティブです。

于 2013-03-11T09:01:38.890 に答える
0

setTimeoutはjquery関数ではありません。それはそれ自身の線上にある必要があります:

var listed=($('p').size())-1,
    btn=$('.compare-btn');
    if(listed < 5) {
      if(listed>=2) {
         btn.show(500);
      }
      else {
         null;
      }
    }
    else
    {
       btn.text("more").addClass('border');
    }
}

setTimeout(function(){btn.removeClass('border'); } ,2000);
于 2013-03-11T09:05:32.443 に答える