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

时间:2012-03-20 17:48:27

标签: jquery

我有准备就绪的函数Start()。当我点击.ExampleClick时,我想停止运行Start()功能。这是我的例子......

$(document).ready(function(){

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

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

});

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

4 个答案:

答案 0 :(得分:7)

如果Start永远循环播放,您的浏览器将会挂起。 JavaScript函数无法真正并行运行。假设Start确实是一些意味着永远循环的后台进程,你需要重新思考它以便它执行一次然后安排自己再次执行某些点,允许其他事件处理。

每次Start执行时,它都可以检查点击处理程序维护的某个状态,以决定它是否应该运行并再次入队:

$(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;
  });

});

答案 1 :(得分:3)

听起来你有一个想要反复运行的功能,然后在你点击时停止它:

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);
    });

});

答案 2 :(得分:2)

你可以用setinterval()来捏造东西:

$(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
};

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

答案 3 :(得分:0)

更新:正如其他人指出的那样,我之前的解决方案完全错误。我正在用setInterval / clearInterval方法替换它(为了正确起见 - 其他人已经指出了更好/类似的解决方案):

$(document).ready(function(){

    var start = setInterval(
        function Start(){
            // Do Stuff on Ready
        },
        someReasonableTimeFrame
    );

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

});