var newLevel = function(level){
setTimeout(function(){
var time=2;
for(var i=1;i<level+1;i++){
var box = parseInt(Math.random()*25+1)
if($("#box"+box).hasClass("g3")){
i--
}else{
$("#box"+box).removeClass();
$("#box"+box).addClass("g3");
}
}
setTimeout(function(){
$(".g3").addClass("g2");
$(".g3").removeClass("g3");
var right = 0;
var toGet = level
$(".g2").click(function(){
$(this).removeClass("g2");
$(this).addClass("g3");
right++
if(right==toGet){
level++;
gameBoard(level)
newLevel(level);
}
})
},time*1000);
},2800);
}
所以我像往常一样制作游戏,但我一如既往地遇到了问题。我认为正在发生的error
来自"click" event
.g2
clicked
,visibly
移除.g2 class
并th
} .g3
class
变为visible
。但在此event
之后re-click
你可div
.g2
{之前visibly
.g3
right++
.g2
并且会产生同样的影响( {{1}})所以似乎{{1}}并未真正被移除?无论如何,我会喜欢一些帮助,欢呼。
答案 0 :(得分:2)
查询jQuery的点击功能不是直播,一旦附加了事件处理程序,如果DOM元素发生变化,它就不会被删除(在你的情况下你的情况下)删除类)。想象一下,使用类为N个元素注册一个单击处理程序,然后从其中一半中删除该类。所有这些都将处理该事件,因为已附加了单击处理程序。
您应该使用one()
功能代替click()
:
$(".g2").one("click", (function() {
它的工作原理是你注册了一个点击处理程序,然后删除了一个类(你不再需要点击处理程序)。这就是one()
所做的事情,事件处理程序只执行一次(所以你不需要任何实时查询)。
答案 1 :(得分:0)
我认为具有类g2的元素将始终具有此onclick,即使在删除该类之后也是如此。这是预料之中的。一种解决方法是在运行代码之前首先检查“this”是否具有类g2:
$(".g2").click(function(){
var $this = $(this);
if($this.hasClass("g2")){
$this.removeClass("g2");
$this.addClass("g3");
right++
if(right==toGet){
level++;
gameBoard(level)
newLevel(level);
}
}
})
但如果g2级别从未重新添加,那么Adriano的答案会更好:)