3

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

我希望数字在按住鼠标的同时每 100 毫秒增加一次。我究竟做错了什么?

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 和 repeatingfunction 上的大 I 后面不应该有 ()

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

的范围loopthis需要是全局的,因为它在mouseup事件处理程序中是未定义的。 setinterval需要更改为setInterval并传递一个匿名函数。也不是附加i更改的htmldiv

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 回答
1

您的 javascript 代码有两个问题。

1)setinterval应该设置间隔

2)loopthis = setInterval(repeatingfunction(), 100);应该是loopthis = setInterval(repeatingfunction, 100);

注意()inrepeatingfunction()不是必需的。

这是jsfiddle

于 2013-09-17T09:28:09.377 回答