我有一个在ready上触发的函数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
});
});实现我想要做的事情的最好方法是什么?
发布于 2012-03-21 01:54:05
如果Start永远循环,你的浏览器就会挂起。JavaScript函数不能真正并行运行。假设Start确实是某个意味着永远循环的后台进程,您需要重新思考,以便它执行一次,然后调度自己在将来某个时候再次执行,从而允许处理其他事件。
每次Start执行时,它可以检查on-click处理程序维护的某些状态,以决定它是否应该运行并重新排队:
$(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;
});
});发布于 2012-03-21 01:59:42
听起来你有一个函数想要重复运行,然后当你点击时停止它:
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);
});
});发布于 2012-03-21 01:56:50
你可以用一个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
};这有点原始,但可以达到类似的效果。
https://stackoverflow.com/questions/9792235
复制相似问题