Если пользователь нажимает на одну ссылку, а затем быстро на другую, вторая ссылка не срабатывает.Как мы этого избежать? - PullRequest
2 голосов
/ 24 августа 2010

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

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

<a href="http://localhost/a/path/remove-thing.html?ID=42" onclick="return confirm('Are you sure you want to remove this thing?');" >Remove this thing!</a>

Теперь, очевидно, обычно, когда пользователь нажимает на эту ссылку, он получает окно подтверждения javascript, которое просит его подтвердить, что он хочет удалить объект. Если они щелкают по cencel, событие onclick имеет значение false и удаление не происходит; если они нажимают хорошо, то это делает.

Моя проблема в том, что если пользователь нажимает на другую ссылку на странице (в любое место), а затем быстро нажимает на ссылку удаления до загрузки первой страницы, JavaScript никогда не запускается, но вещь удаляется - когда они нажали на "Удалить эту вещь!" они запустили этот URL вместо того, на котором они первоначально щелкнули. Есть ли способ избежать этого? Мы делаем подтверждение «неправильно»? Я предполагаю, что это как-то связано с тем, что браузер отключает проверку javascript, когда вы нажимаете первую ссылку, когда он готовится отобразить новую страницу, но при этом все равно принимает изменение URL-адреса до того, как страница исчезнет ...

(Это было протестировано в Firefox 3.6 и подтвердило наличие проблемы. Другие браузеры пока не тестировались.)

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

один из способов обойти это, что будет более изящно ухудшаться, будет выглядеть примерно так:

  1. создайте отдельное подтверждение страницу , которую эти ссылки отправят вам на
  2. используйте javascript для отображения диалогового окна, и если «да», отправьте пользователя прямо на страницу удаления

таким образом, он работает даже без javascript и, надеюсь, должен устранить вашу проблему

EDIT

если js будет всегда присутствовать, вы всегда можете оставить ссылку по умолчанию пустой и перенаправить пользователя после подтверждения

1 голос
/ 24 августа 2010

У вас действительно есть пара проблем. Я думаю, что вам лучше использовать прогрессивный подход к совершенствованию.

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

Вам лучше связать с формой удаления , которая спрашивает "Вы уверены, что хотите удалить X?" и имеет кнопки «Удалить» и «Отмена». После отправки формы или нажатия кнопки «Отмена» вы можете отправить их обратно на исходную страницу. *

Теперь о прогрессивном улучшении: прикрепите обработчик события щелчка к ссылке «удалить», которая вызывает «Вы уверены?» Форма через AJAX или строит его с нуля. Пусть форма заменит ссылку для удаления. Если они нажимают кнопку «Удалить», просто отправьте форму, как и раньше. Если они нажимают кнопку «Отмена», нет необходимости перезагружать страницу - просто удалите форму и восстановите исходную ссылку «удалить».

*, кроме того, убедитесь, что форма является почтовой формой и имеет защиту CSRF. Если вы не знаете о CSRF-атаках, обязательно ознакомьтесь с ними.

...