2016-10-05 33 views
1

我有一个非常独特的情况,我需要一堆jQuery代码重新执行按钮单击。增加的并发症有:jQuery - 按钮点击重新执行一个函数

  • 我不能让浏览器窗口刷新
  • 所有的代码是的setTimeout()的参数中 - 不知道这是否真的很重要

我可以”将代码包装在点击事件中,因为它需要在首次打开或刷新页面时自动运行。要添加一些背景,我嘲笑了以下内容:

setTimeout(function() { 
    // all the scripts that need to run 
}, 2500); 

$('.btn').click(function() { 
    // re-run the above code without refreshing window or browser 
}); 

有没有办法重新运行在这种情况下点击一个按钮的代码?

+0

的可能的复制[如何编写一个可重复使用jQuery的点击功能?(http://stackoverflow.com/questions/22783420/how-to-write-a-reusable-jquery -click-function) –

回答

2

这实际上是一个相当普遍的问题。

使包含你需要在这两个地方运行代码的函数,并调用从setTimeout的功能和onclick处理程序:

function someCode() { 
    // Your code here 
} 

setTimeout (someCode, 2500); 

$('.btn').click(someCode); 

有疑问时,做一个功能。

2

把所有的代码需要在它自己的功能运行,调用该函数在这两个地方

function myFunc() 
{ 
    // all the scripts that need to run 
} 

setTimeout(function() { 
    myFunc(); 
}, 2500); 

$('.btn').click(function() { 
    myFunc(); 
}); 
+0

你实际上并不需要在函数中包装'myFunc',你可以简单地通过引用超时函数和点击函数来传递函数。 – synthet1c

+0

不得不选择第一个答案,但这也是一个完美的解决方案,所以谢谢! – Andyjm

1

你可以做的设置,可以在两个setTimeout()被称为变量中的函数并在click()事件

var nameOfFunction = function() { 
 
    console.log('Hello World!'); 
 
} 
 
setTimeout(nameOfFunction, 2500); 
 

 
$('.btn').on('click', function(e) { 
 
    e.preventDefault(); 
 
    nameOfFunction(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button class="btn">Click Me</button>

1

Javascript对象通过引用传递,因此您可以在每个callacks中通过名称引用该函数。

function myFunc(){ 
 
    // all the scripts that need to run 
 
} 
 

 
setTimeout(myFunc, 2500) 
 

 
$('.btn').click(myFunc)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>