3

http://jsfiddle.net/U9v2H/2/

マウスを押している間、100msごとに数値を増やしたい。私は何を間違っていますか?

var i = 1;
$("#plus1").mousedown(function () {
    loopthis = setinterval(repeatingfunction(), 100);
}).mouseup(function () {
    clearInterval(loopthis);
});

function repeatingfunction() {
    $("#testarea").append(i);
    i = i + 1;
}
4

6 に答える 6

3

呼び出し時に関数への参照を割り当てるのではなく、関数を呼び出していますsetInterval(大文字の I も見逃しています)。これ:

loopthis = setinterval(repeatingfunction(), 100);

次のようにする必要があります。

loopthis = setInterval(repeatingfunction, 100);

元のコードでは、すぐに実行されrepeatingfunction(それが実行されるため())、その関数によって返された値(何もない)を渡して、間隔が空いたときに実行されます。

于 2013-09-17T09:20:52.553 に答える
2

それはつづりsetIntervalがあり、 setInterval が実行される前に繰り返し関数も呼び出します。新しいテキストノードを追加したいのではなく、古い値を新しい値に置き換えたいとは思わない:

var i = 1, loopthis;
$("#plus1").mousedown(function () {
    loopthis = setInterval(repeatingfunction, 100);
}).mouseup(function () {
    clearInterval(loopthis);
});

function repeatingfunction() {
    $("#testarea").text(i);
    i = i + 1;
}

于 2013-09-17T09:20:48.643 に答える
2

setInterval の大きな I と RepeatingFunction の後に () を付けるべきではありません

loopthis = setInterval(repeatingfunction, 100); //notice setInterval and repeatingfunction()

デモ

于 2013-09-17T09:20:58.680 に答える
2

ライブデモ

var i = 1;
$("#plus1").mousedown(function () {
    loopthis = setInterval(repeatingfunction, 100);
}).mouseup(function () {
    clearInterval(loopthis);
});

function repeatingfunction() {
    $("#testarea").append(i);
    i = i + 1;
}
于 2013-09-17T09:22:23.320 に答える
1

JavaScript コードには 2 つの問題があります。

1) setintervalsetInterval である必要があります

2)loopthis = setInterval(repeatingfunction(), 100);あるべきloopthis = setInterval(repeatingfunction, 100);

()in は必須ではないことに注意してくださいrepeatingfunction()

これがjsfiddleです

于 2013-09-17T09:28:09.377 に答える
1

のスコープは、イベント ハンドラー loopthis内で定義されていないため、グローバルである必要があります。匿名関数に変更して渡す必要がありました。また、の値を追加する代わりに、.mouseupsetintervalsetIntervalihtmldiv

Javascript

var i = 1;
var loopthis = {};
$("#plus1").mousedown(function () {
    loopthis = setInterval(function(){repeatingfunction()}, 100);
}).mouseup(function () {
    clearInterval(loopthis);
});

function repeatingfunction() {
    $("#testarea").html(i);
    i = i + 1;
}

JS フィドル: http://jsfiddle.net/U9v2H/16/

于 2013-09-17T09:21:33.813 に答える