2014-08-28 4 views
0

Я хотел бы положить задержку после нажатия кнопки, чтобы кнопка загрузила данные из кеша, прежде чем выполнять следующую строку кода. Будет ли спать лучшим способом сделать это?Как спать после нажатия кнопки

Что-то вроде этого или есть альтернативный подход к лучшему решению этой проблемы?

setInterval(document.getElementById("generateButton"), 1000); 
+1

Попробуйте ['setTimeout'] (https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout) – Oriol

+0

window.setTimeout (document.getElementById (" generateButton "), 1000) ; как это? – user3767481

+0

'setInterval (...)' предназначен для повторного события (после вашей задержки) - вы можете думать о 'setTimeout (...)' для одноразовой вещи – ochi

ответ

3

Не используйте setInterval для этого. У него нет функциональности, которую вы, похоже, хотите (она повторяется). Вместо этого следует использовать JQuery и сделать что-то вроде этого:

$("#generateButton").click(function(event){ 
    setTimeout(function(){ 
     //Do what the button normally does 
    }, 1000);   
}); 

Или (без JQuery):

var generateButton = document.getElementById("generateButton"); 
generateButton.addEventListener("click", function(){ 
    setTimeout(function(){ 
     //Do what the button normally does 
    }, 1000); 
}); 

Использование setTimeout над setInterval является предпочтительным в вашем случае, поскольку setTimeout работает только один раз в то время как setInterval работает несколько раз.

Я предполагаю, что у вас есть в вашем html, <button id='generateButton' onclick='someFunction()'>Button Text</button>. Удалите onclick='someFunction() и положите someFunction(), где я сказал (в примерах) «Сделайте то, что обычно делает кнопка».

Вы также можете добавить в код, который загружает кеш методом, который вызывает другой метод после загрузки кеша (когда вызывается someFunction() с помощью кнопки, загружает кеш и в конце функции (установить это с помощью функции обратного вызова), после загрузки кэша, он вызывает другой метод onCacheLoaded(), который может быть запущен после загрузки кэша

+0

Будет ли второй пример без Jquery программным образом нажать на кнопку для меня, такую ​​как document.getElementById ("generateButton"). Click(); – user3767481

+0

Нет, это произойдет, когда будет нажата кнопка. Вы должны поместить код, который запускается при нажатии кнопки в области, которая гласит '// Делайте то, что обычно делает кнопка.Как вы его настроили прямо сейчас, у вас, вероятно, есть 'onclick = 'someFunction()''. Удалите это и поместите 'someFunction()' где '// Делайте то, что обычно делает кнопка. – Blubberguy22

+0

Я просто хочу уточнить, этот код будет автоматически нажимать на кнопку для меня, а затем установить задержку на 1 секунду, затем после этой задержки в «делать то, что обычно делает кнопка», у меня будет мой другой код, который я хочу запустить после задержки – user3767481

0

Попробуйте setTimeout:.

myButton.addEventListener('click', function() { 
    setTimeout(delayed, 1e3); // Delay code 
}, false); 
function delayed() { 
    // Do whatever 
} 

Примечание setInterval запускает функцию периодически , setTimeout только один раз

Также обратите внимание, что отложенный код должен быть функцией (или строкой, которая будет eval uated, но лучше избегать этого). Однако document.getElementById("generateButton") возвращает элемент html (или null).

+0

в задержке() Я бы программно нажал кнопку так: document.getElementById ("generateButton"). Click(); – user3767481

1

Вы должны использовать обратные вызовы, поэтому в момент загрузки данных из кеша вы можете вызвать его и продолжить выполнение остальной части скрипта. Вы не можете использовать интервал, так как не можете быть уверены, сколько времени требуется для загрузки данных. Хотя имейте в виду асинхронный характер javascript и не блокируйте часть скрипта, которая не зависит от загружаемых данных.

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