Предупреждение, которое предотвращает любое действие браузера, пока не будет снято

#javascript

#javascript

Вопрос:

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

Есть ли способ создать предупреждение, чтобы ничего нельзя было сделать с браузером, пока предупреждение не будет удалено?

Комментарии:

1. И если они отключат свой javascript, это вообще не будет иметь значения. Проверка на стороне клиента — это хорошо, но она должна дополнять проверку на стороне сервера. Мое предложение состояло бы в том, чтобы не зацикливаться на ограничении поведения пользователей на стороне клиента, просто сообщите им о проблеме. И если они не исправят это перед публикацией данных, отправьте их обратно на страницу с информативным сообщением.

2. Я бы избегал использования оповещения. Может быть лучше в PHP-подходе.

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

4. Что произойдет, если ваше предупреждение будет поймано в бесконечном цикле или обработчике событий, подобном onmousemove ? Не держите своих пользователей в плену.

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

Ответ №1:

Вы можете привязаться к window.onbeforeunload и заставить пользователя действовать «правильным» образом, пока они не сделают это правильно.

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

Ответ №2:

Нет, и не должно быть. Раньше были действительно модальные оповещения, но ими злоупотребляли как сумасшедшими. То же, что и при всплывающих окнах без URL и так далее. Хорошо, что мы от них избавились.

В любом случае, как веб-пользователь, я ожидаю, что кнопка «Назад» всегда будет в безопасности и не оставит приложение в несогласованном состоянии. Вероятно, это лучший подход

Ответ №3:

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

Ответ №4:

Даже если вы можете заменить окно предупреждения браузера, функциональность по-прежнему встроена в браузер, поэтому я не думаю, что вы сможете.

Было бы лучше рассмотреть альтернативные формы отображения ошибок.