首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单击时返回False /停止jQuery函数

单击时返回False /停止jQuery函数
EN

Stack Overflow用户
提问于 2012-03-21 01:48:27
回答 4查看 6.3K关注 0票数 2

我有一个在ready上触发的函数Start()。当我单击.ExampleClick时,我想停止运行函数Start()。这是我的例子..。

代码语言:javascript
运行
复制
$(document).ready(function(){

  $(function Start(){
      // Do Stuff on Ready
  });

  $(document).on("click",".ExampleClick",function() {
     // When this is fired, function Start() should stop running
  });

});

实现我想要做的事情的最好方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-21 01:54:05

如果Start永远循环,你的浏览器就会挂起。JavaScript函数不能真正并行运行。假设Start确实是某个意味着永远循环的后台进程,您需要重新思考,以便它执行一次,然后调度自己在将来某个时候再次执行,从而允许处理其他事件。

每次Start执行时,它可以检查on-click处理程序维护的某些状态,以决定它是否应该运行并重新排队:

代码语言:javascript
运行
复制
$(document).ready(function(){

  var clicked = false;

  var Start = function () {
      if (clicked) return;

      // Do Stuff on Ready

      setTimeout(Start, 100);
  };

  Start();

  $(document).on("click",".ExampleClick",function() {
     // When this is fired, function Start() should stop running

     clicked = true;
  });

});
票数 7
EN

Stack Overflow用户

发布于 2012-03-21 01:59:42

听起来你有一个函数想要重复运行,然后当你点击时停止它:

代码语言:javascript
运行
复制
doStuff = function() {
    // stuff to do regularly
}

$(document).ready(function(){

    // run doStuff every 2 seconds
    var jobId = window.setInterval(doStuff, 2000);

    // store the job id in a jquery data object
    $('body').data("doStuffJobId", jobId);

    // set up click hander for css class Example Click
    $(".ExampleClick").click(function() {
        // get the job id
        var jobId = $('body').data("doStuffJobId");
        window.clearInterval(jobId);
    });

});
票数 3
EN

Stack Overflow用户

发布于 2012-03-21 01:56:50

你可以用一个setinterval()来虚构一些东西:

代码语言:javascript
运行
复制
$(document).ready(function(){ 

  var intervalHolder;     

  $(function Start(){ 
      // Do Stuff on Ready
      intervalHolder = setInterval("myTimedFunction()",1000);
      // This runs "myTimedFunction()" every second
  }); 

  $(document).on("click",".ExampleClick",function() { 
     // When this is fired, function Start() should stop running 
     clearInterval(intervalHolder);
  }); 

}); 

function myTimedFunction() {
   // Do groovy things every second
};

这有点原始,但可以达到类似的效果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9792235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档