2016-10-05 4 views
1

У меня довольно уникальная ситуация, когда мне нужно собрать код jQuery для повторного запуска при нажатии кнопки. Добавленные осложнения:jQuery - повторите выполнение функции при нажатии кнопки

  • Я не могу позволить окно браузера, чтобы обновить
  • Всего кода находится в пределах параметра SetTimeout() - не уверен, что если это действительно имеет значение

Я могу» t оберните код внутри события клика, поскольку он должен запускаться автоматически при первом открытии или обновлении страницы. Для того, чтобы добавить немного контекста, я издевался до следующего:

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 передаются по ссылке, поэтому вы можете просто ссылаться на функцию по имени в каждом из них.

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>

Смежные вопросы