2

我正在尝试设置一个只能单击一次的 div,但我的 if 一直忽略条件,我真的不知道为什么。

$(document).ready(function() {
  var defaultState = true;
  if (defaultState) {
    defaultState = false;
    $("#element").click(function() {
    //Do stuff to elements
  }
});

我尝试以不同的方式解决它。我希望这个条件只用另一个 div 的上下文填充一个 div,但只有一次。所以我尝试了这样的条件:if($("#element").html().length === 0)我什至用控制台检查了我的条件值,即使它是 5000,显然不再是 0,它一直忽略我的条件并进入 if。

4

4 回答 4

2

一旦你绑定了点击处理程序,它就被绑定了。从那时起,直到您解除绑定,该处理程序将始终被触发。

听起来one()这就是您要寻找的东西:

$('#element').one('click', function() {
   //...
});

那只会触发一次。

于 2013-09-13T20:22:04.943 回答
1

在 document.ready 运行之后,事件处理程序已经在第一次被附加。

您可以只使用 jQuery.one()事件处理程序。 jQuery .one() 文档

$("#element").one('click', function() {
    //Do stuff to elements
});
于 2013-09-13T20:21:32.583 回答
1
$(document).ready(function() {
    $("#element").one('click', function() {
        //Do stuff to elements
    });
});

或者

$("#element").on('click', function(){
    //Do what you want
});

//Later in your code

$("#element").off('click');

如果您设置使用标志变量,您也可以这样做:

$(document).ready(function() {
    var defaultState = true;

    $("#element").click(function(e) {
        if (defaultState) {
            //Do what you want
        }

        defaultState = false;
    }
});
于 2013-09-13T20:22:06.930 回答
0

添加事件侦听$("#element").click(function() {器后,它将绑定到该元素。但是你可以做些什么来把你if的 click 函数放在里面,并把false你的 flag 变量放在if. 好处是你可以再次给变量true​​,你点击会“再次”运行。

$(document).ready(function () {
    var defaultState = true;
    $("#element").click(function () {
        if (defaultState) {
            defaultState = false;
            //Do stuff to elements
        } else {
            return false;
        }
    });
});
于 2013-09-13T20:22:07.693 回答