Эмулировать Javascript «предупреждение», блокирующий характер

javascript alert

13571 просмотра

3 ответа

Можно ли создать собственное модальное сообщение, которое «блокирует» выполнение скрипта до ввода пользователя?

Например, как вы можете достичь этого, не используя встроенные функции оповещения / приглашения в окне?

setInterval(function(){ 
     alert('Click OK to Continue');  // timing stops until user hits ok
},4000);

Я знаю, что ваш пользовательский диалог может вызывать функцию обратного вызова при вводе данных пользователем, но я заинтересован в том, чтобы заставить это поведение блокировки

Автор: lostsource Источник Размещён: 12.11.2019 09:52

Ответы (3)


9 плюса

Решение

Можно ли создать собственное модальное сообщение, которое «блокирует» выполнение скрипта до ввода пользователя?

Нет. Нет способа блокировать выполнение или взаимодействие с пользователем так же эффективно, как собственное всплывающее окно (поскольку пользовательские всплывающие окна всегда технически способны использовать инструменты разработчика для выхода из него).

Однако, как говорит pst в комментариях к вопросу, асинхронные лайтбоксы не являются обременительными и почти так же эффективны при блокировании взаимодействия с пользователем, как всплывающие окна, поэтому я рекомендую найти библиотеку, которая предоставляет лайтбоксы, которые вам нравятся, и работать с этим.

Например, как вы можете достичь этого, не используя встроенные функции оповещения / приглашения в окне?

Вы не можете использовать этот код, чтобы делать то, что вы говорите, даже с собственными функциями оповещения / приглашения окна (см. Эту скрипку - подождите 4 секунды, прежде чем закрывать всплывающее окно). Вам понадобится следующее:

function timeoutFunction() {
    alert('Click OK to Continue');  // timing ACTUALLY stops until user hits ok
    setTimeout(timeoutFunction, 4000);
}
setTimeout(timeoutFunction,4000);

Это то, что вы не можете реализовать (точнее - смотрите выше на лайтбоксах) без родных всплывающих окон.

Даже while(true)циклы обычно не блокируются так же, как и всплывающие окна - по крайней мере, у firefox есть сообщение «stop script», которое появляется после того, как он идет слишком долго, и я вполне уверен, что другие крупные браузеры тоже.

Автор: Jeff Размещён: 29.11.2012 10:02

-1 плюса

Нет, вы не можете (по крайней мере, не в браузере). API Javascript в основном асинхронные. alert/ promptявляются исключениями. Однако работать с асинхронными приглашениями и обратными вызовами не очень сложно.

Автор: Emil Ivanov Размещён: 29.11.2012 09:47

-2 плюса

Немного стар, но в случае, если это поможет, я нашел свое решение с этим:

var answer = confirm("are you sure?"); if(!answer)return;

Автор: Julien Altieri Размещён: 13.08.2014 08:58
Вопросы из категории :
32x32