Как избежать нескольких нажатий на кнопку

0

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

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

Я знаю, что могу отключить кнопки при первом щелчке. Но мне не нравится писать логику включения/отключения кнопок. Есть ли какой-либо код, представленный в JavaScript, который работает более разумно.

  • 0
    Вы храните текущий номер страницы в переменной JavaScript, которую вы ++ нажимаете?
  • 0
    Вы используете панель обновления на странице?
Показать ещё 4 комментария
Теги:
javascript-events
events

4 ответа

2

У меня есть трюк, который мне нравится совсем немного = D

Я использую этот css:

.page-load-mask {
  position: fixed;
  z-index: 99999;
  top: 0;
  height: 100%;
  width: 100%;
  cursor: progress;
}

с этой разметкой в любом месте страницы:

Когда что-либо загружается, покажите, что div и спрячьте его снова, когда загрузка будет выполнена.

Живой демо здесь (нажмите).

Чтобы далее объяснить, что происходит, так это то, что .page-load-mask будет охватывать всю страницу, когда она видна, и зависание над ней стирает курсор как загрузку. Поскольку он закрывает страницу, ничто не может быть нажато. Вы также можете адаптировать это, чтобы заполнить только раздел страницы, используя position: absolute или другое позиционирование, ширину, высоту и т.д.

  • 0
    это потребует javascript coding .. но пользователь попросил не любить код для включения и выключения. :)
  • 0
    @ Terror.Blade Это абсолютно неправильно. Процитируем OP: «Есть ли в JavaScript какая-либо инструкция кода, которая работает немного умнее». Да, есть. mask.style.display = 'block' .
1

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

 <asp:UpdateProgress ID="udpProgress" AssociatedUpdatePanelID="update" runat="server">
    <ProgressTemplate>
        <div style="width: 2000px; height: 1000px; background-color: Gray;position: absolute; opacity:50;filter:Alpha(Opacity=50);z-index:10000"> 

        </div>
         <img style="vertical-align: middle; margin-left: 47%; margin-top: 10%; position: absolute;z-index:10001"
                id="imgProgressImage" alt="Progressing" src="Images/LoadingProgress.gif" />
    </ProgressTemplate>
</asp:UpdateProgress>


<asp:UpdatePanel ID="update" runat="server">
 </ContentTemplate >
 <ContentTemplate >
</asp:UpdatePanel>
  • 0
    Кстати, ваш ответ на самом деле плохой. Я не собираюсь понижать голос, но вы не должны публиковать код asp, если ОП не упомянул или не пометил его.
  • 0
    хорошо, но это может быть полезно, если оп на самом деле не знал
Показать ещё 2 комментария
0

Обычно я отключился и включил кнопку или имел bool. Однако, если вы хотите добавить и удалить прослушиватели событий.

Используйте этот код прямо из MDN.

Это приведет к удалению прослушивателя событий после нажатия кнопки.

var div = document.getElementById("div");

var listener = function (event) {
    div.removeEventListener("click", listener, false);
};

div.addEventListener("click", listener, false);
0

По вашему комментарию, вы используете переменную в JS для хранения текущего номера страницы и увеличения/уменьшения на 1 при нажатии на кнопки "Далее" или "Предыдущий".

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню