我有一个简单的脚本,每秒使用setInterval产生一个div元素。我面临的问题是addScore()会为窗口中的每个元素触发一次。因此,如果生成了四个目标,则addScore()函数会运行四次。
<div class="wrap">
<div class="intro">
<p>Simply press go and click the circles as fast as you can!</p>
<button class="go" type="button">Go!</button>
</div>
</div>
<script type="text/javascript">
var score = 0; // Starting score for game
function addScore(){
score++;
console.log(score);
}
function spawnTargets() {
$(".wrap").append("<div class='target'>Hello</div>");
$(".target").click(function(){
$(this).hide();
addScore();
});
}
$(".go").click(function() {
$(".intro").toggle();
setInterval(spawnTargets, 1000);
});
</script>
答案 0 :(得分:4)
当您将点击事件添加到.target时,您可以使用之前添加的所有div进行操作!请改用:
<script type="text/javascript">
var score = 0; // Starting score for game
function addScore(){
score++;
console.log(score);
}
function spawnTargets() {
$(".wrap").append("<div class='target'>Hello</div>");
}
$(".go").click(function() {
$(".intro").toggle();
setInterval(spawnTargets, 1000);
});
$(".wrap").on('click', '.target', function(){
$(this).hide();
addScore();
});
</script>
.on-function将事件处理程序添加到父元素,并过滤来自.target的click元素。
答案 1 :(得分:0)
当您对该功能进行调用时,绑定多次点击事件
function spawnTargets() {
$(".wrap").append("<div class='target'>Hello</div>");
$(".target").click(function(){
$(this).hide();
addScore();
});
}
相反,您需要委派活动
更改
$(".target").click(function(){
到
$('.wrap').on("click", ".target", function(){
将其移至功能
之外<强>代码强>
var score = 0; // Starting score for game
function addScore() {
score++;
console.log(score);
}
function spawnTargets() {
$(".wrap").append("<div class='target'>Hello</div>");
}
$('.wrap').on("click", ".target", function () {
$(this).hide();
addScore();
});
$(".go").click(function () {
$(".intro").toggle();
setInterval(spawnTargets, 1000);
});