2012-11-28 23 views
2

在我的游戏中,我想确保每次看起来停止加载函数多次,启动按钮只被单击一次。当计数被重置时,JQuery - bind()

如果计数大于零,我已经写了一些代码来计算点击和解除绑定。

var oneClick = 0; 
$(".start-btn-wrapper").bind("click", function() { 
    oneClick++; 
     if (oneClick > 0) { 
     $(this).unbind("click"); 
    } 
     newGame(); 
}); 

这工作得很好,但我需要一种方法来再次绑定它准备出现下一次(当点击重启BTN),所以我写了这个重置计数。

$(".restart-btn").click(function() { 
    resetGame(); 
    oneClick = 0; 

}); 

出于某种原因,这并不做的工作,我期待等了soloution

+0

如果您使用最新的jQuery您需要更改['.bind() '](http://api.jquery.com/bind/)到['.on()'](http://api.jquery.com/on/) –

回答

2

你不再具有约束力,但只是改变一键式,它甚至没有测试作为事件处理程序$(".start-btn-wrapper")不再绑定。

但不是解除绑定/重新绑定,这是昂贵的,为什么不只是测试oneClick

$(".start-btn-wrapper").bind("click", function() { 
    if (oneClick++ > 0) return; 
    newGame(); 
} 

请注意,如果你只需要两种状态,一个布尔值会更清楚:

var clickable = true; 
$(".start-btn-wrapper").bind("click", function() { 
    if (!clickable) return; 
    newGame(); 
    clickable = false; 
} 
$(".restart-btn").click(function() { 
    resetGame(); 
    clickable = true; 
}); 
0

简单

var oneClick = 0; 
$(".start-btn-wrapper").bind("click", function() { 

     if (oneClick > 0) { 
     return false; 
    } 
     oneClick++; 
     newGame(); 
}); 

$(".restart-btn").click(function() { 
    resetGame(); 
    oneClick = 0; 

}); 
1

jQuery有一个内置的方法正是这个用法。这是.one()

因此,所有你需要做的就是

$(".start-btn-wrapper").one('click',newGame); 

和重启

$(".restart-btn").click(function() { 
    resetGame(); 
    $(".start-btn-wrapper").one('click',newGame); 
}); 
+0

简单! +1谢谢! @Gaby aka G. Petrioli – sMilbz

0
var oneClick = 0; 

function clickHandler() { 
    oneClick++; 
     if (oneClick > 0) { 
     $(".start-btn-wrapper").unbind("click"); 
    } 
     newGame(); 
} 

$(".start-btn-wrapper").bind("click", clickHandler); 

$(".restart-btn").click(function() { 
    resetGame(); 
    oneClick = 0; 

    $(".start-btn-wrapper").bind("click", clickHandler); 
});