У меня есть приложение APEX с кнопкой, которая вызывает функцию javascript. Функция выполняет скрипинг экрана и занимает несколько секунд. Я хочу сначала отобразить значок прядильщика, чтобы обеспечить ощущение, что что-то происходит. Однако, несмотря на то, что у меня есть показания spinner с вызовом jquery .show() до вызова функции, они, похоже, оба выполняются одновременно ... через секунды после нажатия кнопки. Это похоже на то, что jquery .show() не будет выполняться до завершения вызова функции. Как я могу выполнить .show() перед вызовом функции? Я даже попытался добавить .show() в первую строку функции, но результат тот же. Spinner не отображается, пока функция не завершится.jQuery show not executing when expected
ответ
Показать принимает функцию обратного вызова в качестве параметра. См. Пример ниже.
function buttonHandler() {
$(".spinner").show(function() {
// this will be executed after show has completed
});
}
'show' не является функцией анимации, если вы не передадите ей длительность или обратный вызов, конечно. :-) Но да, это работает. –
Правда, я удаляю неясную формулировку из ответа – skajfes
Я забыл, что шоу принимает функцию обратного вызова. Спасибо за подсказку, это сработало отлично! –
Как я могу выполнить .show() перед вызовом функции?
Вы называете .show
, то выход обратно в браузер для крошечного немного времени, перед вызовом функции, например:
function buttonHandler() {
$("...").show();
setTimeout(theFunction, 0);
}
Вы должны будете экспериментировать с целевыми браузерами для определения требуется ли вам значение больше 0
. Значение в миллисекундах, поэтому все до 50 или около того будут в значительной степени незаметны для человека.
Не вызывая функцию до тех пор, пока вы не вернетесь в браузер, вы дадите браузеру возможность обновить дисплей.
Обратите внимание, что счетчик не может быть анимирован, пока функция связывает вещи, это зависит от браузера. Вы можете предпочесть показывать что-то статическое, но динамически выглядящее (путь «идти быстрее»), чтобы избежать несогласованности между браузерами.
Живой пример использования 50ms:
$("#the-button").on("click", buttonHandler);
function buttonHandler() {
$("#spinner").show();
$("#done").hide();
setTimeout(theFunction, 50);
}
function theFunction() {
var target = Date.now() + 1000;
while (Date.now() < target) {
// Do nothing, we're just simulating a busy function
}
$("#spinner").hide();
$("#done").show();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="button" id="the-button" value="Click me">
<div id="spinner" style="display:none">We're doing it, one sec!</div>
<div id="done" style="display:none">Function is done now</div>
Я всегда считал, что это почему-то характерно для Chrome. – Andy
@ Andy: '0' работает и в недавнем IE. Firefox хочет дольше, '50' работает для выше (в моей системе). –
- 1. jQuery (ajax) not executing
- 2. JQuery post method not executing
- 3. JQuery validation custom method not show when false возвращается
- 4. Remotipart JS Not Executing
- 5. Webview javascript not executing
- 6. Powershell ScriptBlock Not Executing
- 7. PHP Curl not executing
- 8. sql update not executing
- 9. Macro Not Executing
- 10. mysqli insert - not executing
- 11. Meteor.call callback not executing
- 12. hover fade in not executing
- 13. java if statement not executing
- 14. powershell if statement not executing
- 15. Php login not executing else
- 16. PHPUnit Test Cases not executing
- 17. android: onClick xml not executing
- 18. PHP mysql code not executing
- 19. Nodejs mysql query not executing
- 20. make not executing correct Makefile
- 21. Jquery text hide and show when onkeyup
- 22. Crashed When show UIAlertView
- 23. JQuery Hide/show not working
- 24. jQuery Show/Hide Not Functioning
- 25. JQuery hide/show not working
- 26. JQuery validate not show error
- 27. jQuery onclick not show nav
- 28. Datepicker not show when click pagination boostrap table
- 29. VirtualKeyboard not Show when focus Изменить поля в проекте Firemonkey
- 30. Django testing, no 404 response when expected
Вы намеренно typo'd свой титул, чтобы обойти тот факт, что вопрос с этим точным именем уже существует. ** Не делайте этого **. Придумайте имя, которое на самом деле описывает ваш вопрос. – meagar
вы можете показать код, который у вас есть, который воспроизводит эту проблему. – Quince
Вы можете сделать значок перед тем, как функция вызывается с помощью 'setTimeout', но при запуске функции она не будет анимирована. – Guffa