-1

<span>番号付きのIDのセットがあります。クラスを追加したいのですが、クラスを追加するよりも3秒間待ってクラスを削除する<span>など、...Id=1<span id=2>

このコードを機能させる方法。whileループを呼び出すことができません誰かがsetTimeout助けることができますか?

var spanSet = 4;
var spanId = 1;
while (spanSet != 0) {
    changeClass();
    spanSet--;
}

function changeClass() {
    $('#' + spanId).addClass("hilite");
    setTimeout(remove, 1000);
    spanId++;
}

function remove() {
    alert('remove');
    $('#' + spanId).removeClass("hilite");
    return true;
}
4

2 に答える 2

1

このjsfiddleをチェックして、コードで実際に何が起こっているかを確認してください。

ループを削除し、次のwhileように設定します(jsfiddleを参照)。

var spanId = 1;
changeClass();

function changeClass(){
 $('#'+spanId).addClass("hilite");
 spanId+=1;
 setTimeout(remove, 500);
}

function remove(){
 $('#'+(spanId-1)).removeClass("hilite");
 if (spanId<6){
   changeClass();
 }
}
于 2012-07-22T14:40:34.193 に答える
0

これは、jQueryアニメーション関数を使用すると最も簡単になります。

必要なのこれだけです。

var spanId = 1;

(function hilite() {
    $('#' + spanId).addClass('hilite').delay(3000).queue(function() {
        $(this).removeClass('hilite').dequeue();
        if (++spanId < 5) {
            hilite();
        }
    });
})();

http://jsfiddle.net/alnitak/Bs8kj/での作業デモ

IDについて何も想定せず、外部変数を必要としない、より一般的なものについては、次のことを試してください。

(function hilite(a) {
    $(a.shift()).addClass('hilite').delay(3000).queue(function() {
        $(this).removeClass('hilite');
        if (a.length) {
            hilite(a);
        }
    });
})(['#1', '#2', '#3', '#4']);

注意:数値IDはHTML5のものです。また、CSSではサポートされていません。

于 2012-07-22T15:45:48.580 に答える