【问题标题】:How to wait till click inside function?如何等到点击内部功能?
【发布时间】:2025-11-26 23:15:03
【问题描述】:

我正在对 Javascript/jQuery 进行一些初学者编码,但遇到了一个问题。长话短说:

  1. 我在页面上有一个元素应该忽略任何点击;
  2. 一旦调用特定函数,它应该等到 n 次点击;
  3. 函数应该执行一些代码;
  4. 完成后元素应再次忽略点击。

我尝试使用 setInterval() / clearInterval() 但没有成功。

请帮帮我:)

P.S.:一种方法是使用新代码重新加载页面,但这不适用于我的情况。

更新:

var select = function() {
    /*once called this function should enable clicks on <td>
    toggling its class to yellow and once both cells are yellow
    clicking should be disabled*/
};

$(document).ready(function(){
    $("button[name=start]").click(function(){
        select();
    });
}); 

http://jsfiddle.net/superiorbanana/Z53EU/。希望这一小段代码能阐明这个想法。

【问题讨论】:

  • 请至少显示一些 html
  • jQuery 中有一个叫做 delay() 的东西,但我认为你应该展示一些你尝试过的代码。
  • 存储一个变量并在点击处理程序上检查该变量。如果变量不为真,则不执行该函数。执行后,将其设置回false。
  • "一旦调用特定函数,它应该等到 n 次点击;"所以当发生 n 次点击时(在那个元素上?),它应该执行代码然后再次忽略点击?
  • 据我了解,您可以设置一个布尔标志来检查是否调用了特定函数。您可以设置一个计数器来计算 n 次点击。

标签: javascript jquery events javascript-events


【解决方案1】:

我认为您正在寻找 jQuery 的 onoff 方法。

使用on 绑定一个点击处理程序,然后在完成后将其转为off。因此,在您的情况下,您可以在触发点击处理程序后立即关闭它。例如:

$(document).ready(function () {
    var $tds = $('td'), // store td's
        count = $tds.length; // store # of td's
    $("button[name=start]").on('click', function (e) {
        // pass `e` so that it can be used to turn itself off
        $(this).off(e); // this function won't execute again

        // bind td clicking after button's clicked
        $tds.on('click', function (e) {
            $(this).addClass('clicked').off(e); // executed once per td

            // the if statement and the count is actually 
            // not necessary; it's just to demonstrate 
            // that all the click handlers have ended.

            count--; // count - 1                
            if (count === 0) {
                console.log('there are no more click handlers');
            }
        });
    });
});

或者干脆

$(document).ready(function () {
    $("button[name=start]").on('click', function (e) {
        $(this).off(e);
        $('td').on('click', function (e) {
            $(this).addClass('clicked').off(e);
        });
    });
});

查看jsfiddle 上的代码。

【讨论】:

  • 谢谢!好像是我要找的那个!看起来我之前没有得到off() 的想法:-)
【解决方案2】:

只需将点击次数存储在变量中并使用 javascript 检查即可。像这样的:

var x = 0;

$('#button').click(function(){
   x++;
    if (x == 5) {
        alert("hello");
    }
});

fiddle

【讨论】:

    【解决方案3】:

    我不确定你是否在寻找这个,

    HTML

    <span class="one">click disabled</span>
    <br/>
    <span class="two">enable click</span>
    

    jquery

    var count=0;
    $(".two").click(function(){
        $(".one").text("click enabled");
        $(".one").click(function(){
            count++;
            if(count==5)
            {
                $(".one").text("click disabled");
                $(".one").off("click");
    
            }
        alert("click enabled");
        });
    
    });
    

    Fiddle demo

    在上面的代码中,第一个 span 的 click 事件在第二个 span 被点击之前不会触发。仅在单击第二个跨度后才绑定第一个跨度的单击事件。 还有一个点击计数器。当计数器达到限制时,第一个跨度的点击事件将使用off()删除

    【讨论】:

      【解决方案4】:

      您应该在开始时设置事件侦听器以侦听该元素上的任何点击事件。

      一旦调用特定函数,它应该等到 n 次点击;

      那个“特定函数”可以将之前为假的变量设置为“真”。这是单击事件侦听器正在等待的内容。一旦变量为真,计数器变量就可以计算点击次数

      n 次点击;

      一旦计数器达到所需的点击次数,您就可以执行任何您想要的操作:

      if(counter === n) {
          executeMe();
          counter = 0;
      }
      

      如果间隔始终相同,您也可以使用“mod”。

      【讨论】:

        最近更新 更多