0

我试图在我的代码中向特定的 id 标签添加一个类。类是 kb1、kb2、kb3 或 kb4。我希望 JavaScript 在 1 到 4 之间选择一个随机数,然后将其应用于类以让它随机添加一个类。

所有这些都是在一个循环中完成的,因此它将每 30 秒不断地添加和删除类。

编辑:我很抱歉,我试图解释我的问题并没有添加问题。由于某种原因,当它运行时没有任何反应。没有添加任何类。您可以根据随机数添加类吗?如果可以,为什么我不能正常工作?

$(document).ready(function() {
 function kbadd() {
  number = 1 + Math.floor(Math.random() * 4);  
   $("#kb1").addClass("kb"+number);
   $("#kb2").addClass("kb"+number);
   $("#kb3").addClass("kb"+number);
   $("#kb4").addClass("kb"+number);
   timeoutID = window.setTimeout(kbremove(number), 30000);
   }
 function kbremove(number) {
  $("#kb1").removeClass("kb"+number);
  $("#kb2").removeClass("kb"+number);
  $("#kb3").removeClass("kb"+number);
  $("#kb4").removeClass("kb"+number);
  timeoutID = window.setTimeout(kbadd, 1);
  }
kbadd();
});
4

4 回答 4

3

你不能调用这样的setTimeout函数。

尝试

timeoutID = window.setTimeout(function () {
    kbremove(number);
}, 30000);
于 2013-05-09T14:33:19.440 回答
1

如果您调试代码(例如使用 firebug),您将看到消息Error: useless setTimeout call (missing quotes around argument?)。这意味着您必须在setTimeout.

代替

timeoutID = window.setTimeout(kbremove(number), 30000);

timeoutID = window.setTimeout(function() {kbremove(number);}, 30000);

编写脚本的最简单方法是

function kbadd() {
    number = 1 + Math.floor(Math.random() * 4);  
    $('#kb1, #kb2, #kb3, #kb4').addClass('kb' + number);
    window.setTimeout(function() { kbremove(number); }, 30000);
}

function kbremove(number) {
    $('#kb1, #kb2, #kb3, #kb4').removeClass('kb' + number);
    window.setTimeout(kbadd, 1);
}

$(document).ready(kbadd);

这里

于 2013-05-09T14:47:19.263 回答
1

尝试将 setTimeout 中的函数包装在一个函数(demo)中:

$(function () {
    function kbadd() {
        var number = 1 + Math.floor(Math.random() * 4);
        $("#kb1, #kb2, #kb3, #kb4").addClass("kb" + number);
        window.setTimeout(function() { kbremove(number) }, 30000);
    }

    function kbremove(number) {
        $("#kb1, #kb2, #kb3, #kb4").removeClass("kb" + number);
        kbadd();
    }
    kbadd();
});
于 2013-05-09T14:34:12.353 回答
0

您正在匿名函数中定义函数。因此kbadd,在调用kbremoveyour 时并不存在于全局范围内。setTimeout

尝试将函数定义移到函数之外$(document).ready(),如下所示:

function kbadd() {
    var number = 1 + Math.floor(Math.random() * 4);  
    $("#kb1").addClass("kb"+number);
    $("#kb2").addClass("kb"+number);
    $("#kb3").addClass("kb"+number);
    $("#kb4").addClass("kb"+number);
    timeoutID = window.setTimeout(function() { kbremove(number); }, 30000);
}
function kbremove(number) {
    $("#kb1").removeClass("kb"+number);
    $("#kb2").removeClass("kb"+number);
    $("#kb3").removeClass("kb"+number);
    $("#kb4").removeClass("kb"+number);
    timeoutID = window.setTimeout(kbadd, 1);
}

$(document).ready(function() {
    kbadd();
});

您的某些 setTimeout 调用也存在问题。我认为您实际上可以通过一些重构在一个函数中做到这一点。

于 2013-05-09T14:33:02.733 回答