Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用具有间隔的函数来更改div的类?_Javascript_Jquery_Class_Intervals - Fatal编程技术网

Javascript 使用具有间隔的函数来更改div的类?

Javascript 使用具有间隔的函数来更改div的类?,javascript,jquery,class,intervals,Javascript,Jquery,Class,Intervals,我正在尝试创建一个简单的游戏,它有一个函数,选择一个随机div(从选择中),然后使用一个间隔设置一个随机倒计时,当倒计时达到0时,该div的类将改变。 然后我有它,所以当你点击分配给那个类的东西时,它会变回原来的类 在我运行代码的时候,div在倒计时后似乎在变化,但在我单击它们时不会变化。 但我的主要问题是,更改随机div的主函数只运行一次 div(“框”)以开头。请稍候 我的代码: var react=function(){ var-box=parseInt(Math.random()*64)

我正在尝试创建一个简单的游戏,它有一个函数,选择一个随机div(从选择中),然后使用一个间隔设置一个随机倒计时,当倒计时达到0时,该div的类将改变。 然后我有它,所以当你点击分配给那个类的东西时,它会变回原来的类

在我运行代码的时候,div在倒计时后似乎在变化,但在我单击它们时不会变化。 但我的主要问题是,更改随机div的主函数只运行一次

div(“框”)以开头。请稍候

我的代码:

var react=function(){
var-box=parseInt(Math.random()*64);
while($(“box”+box).hasClass(“now”)){
box=parseInt(Math.random()*64);
}
var timer=parseInt((Math.random()*10)+2);
var countdown=setInterval(函数(){
计时器-=1
$(“#box”+box).text(parseFloat(timer.toFixed(0));

如果(计时器问题在于如何绑定
单击
事件。您将希望绑定该事件,而不是使用
单击()

运行
setInterval
时,它会向元素添加一个类“new”。但是,由于没有元素具有该类名(在$doc.ready中调用
click()
时),因此不会触发任何处理程序

首先,一把小提琴演示了这一点:

下面是一个使用代码+委派事件的示例:

var react = function(){
    var box = parseInt(Math.random()*64);

    while($("#box"+box).hasClass("now")) {
        box = parseInt(Math.random()*64);
    }

    var timer = parseInt((Math.random()*10)+2);

    var countdown=setInterval(function(){
        var $el = $('#box' + box);

        timer-=1
        $el.text(parseFloat(timer.toFixed(0)));

        if(timer<=0){
            clearInterval(countdown);

            $el.text("")
               .removeClass("wait")
               .addClass("now");
        }
    },1000);
}

$(document).ready(function(){
    $parent = $('.parent-to-now-elements') // $('body') works, but not as efficient
    setInterval(react, 1000);

    $parent.on('click', '.now', function(){
        $(this).removeClass("now");
        $(this).addClass("wait");
    })
})
var react=function(){
var-box=parseInt(Math.random()*64);
while($(“#box”+box).hasClass(“now”)){
box=parseInt(Math.random()*64);
}
var timer=parseInt((Math.random()*10)+2);
var countdown=setInterval(函数(){
变量$el=$(“#box”+box);
计时器-=1
$el.text(parseFloat(timer.toFixed(0));
中频(定时器)
“但我的主要问题是,更改随机div的主函数只运行一次。”

我想你指的是下面这一行

setInterval(react(), 1000);
修改如下:

setInterval(react, 1000);
更新:

假设有固定数量的div,可以在页面加载时为所有div分配一个公共处理程序,如

$(document).ready(function(){
  $('your-common-div-selector').click(function(){
    if($(this).hasClass("now")&& !$(this).hasClass("wait")) {
      this.removeClass("now");
      this.addClass("wait");
  });
});

顺便说一句:您的选择器错误:
while($(“box”+box).hasClass(“now”)){
缺少一个
#
来按ID选择元素。在setInterval内调用
.click
的问题是,如果所选的随机div是以前选择过的,则您将另一个
click
事件绑定到同一元素。这将导致元素触发回调两次(依此类推-取决于随机选择器的随机程度…)单击现在起作用,但间隔不会发生多次,我尝试了您的建议,它只是冻结了所有内容。您是如何委托单击事件的?我假设如下:
$('.parent_元素')。on('click',now',function(){/*logic*/})
?-我会更新我的答案,再解释一下…@user3378151-没问题。我制作了一把小提琴(),证明它确实有效。祝游戏好运!