Я имею дело с унаследованным приложением, где они используют теги для многих, форма Ajax "отправляет". Если бы мы использовали [вход] кнопки, то мы могли бы просто установить запрещать атрибут [вход] тег. Но на гиперссылках отключают, не часть спецификации и не последовательный перекрестный браузер.
Мы ищем простое решение для блокирования дополнительных щелчков по гиперссылке.
Примечание: мы используем JavaScript с jQuery
Решение womp'а - это очень основательный способ сделать это.
Однако, если вы хотите что-то более простое, я бы, вероятно, реализовал семафор. Просто установите флаг "отправка" и проверьте, установлен ли семафор, когда пользователь нажимает на ссылку. Вы можете сделать это, установив флаг на самом DOM-объекте, или использовать глобальный булев.
$('#link').each(function() {
this.submitting = false;
}).click(function() {
if (!this.submitting)
{
this.submitting = true;
var self = this;
$.ajax({
success: function() {
self.submitting = false;
},
error: function() {
self.submitting = false; // make sure they can try again
}
});
}
});
Я, конечно, сократил вызов $.ajax, но, думаю, вы поняли суть.
Edit: Э... на самом деле, забыл самую важную часть. If (!submitting).
Мне нравится подпрограмма Бена Наделя для работы с этим .
По сути, вы создаете оболочку вокруг функции jQuery .ajax и можете встраивать все виды вещей, которые происходят для каждого запроса ajax в вашем приложении. Одна из таких вещей - отслеживание запросов.
Вы увидите, что в его методе-оболочке getJSON
он принимает необязательный параметр «name» в качестве имени запроса. Это может быть что угодно, это просто ключ для определения источника запроса. В вашем случае он будет предоставляться при каждом нажатии ссылки. Если параметр имени существует, он сохраняет его в коллекции отслеживания.
Если поступает другой вызов с тем же именем запроса, он просто отбрасывается. Как только исходный запрос возвращается, он сбрасывает флаг отслеживания для этого имени запроса.
Этот метод отлично подходит для расширения многих общих функций на все запросы ajax в вашем приложении. Я создал обработчик множественных запросов, который также позволяет вам указывать поведение новых запросов - прерывает ли он какие-либо существующие или просто отбрасывает. Это полезно, когда вы хотите, чтобы последний запрос был обработан, например, для автозаполнения.
В обработчике "click" либо верните false, либо предотвратите значение по умолчанию -
$('#target').click(function(e) {
e.preventDefault();
alert('Handler for .click() called.');
});
$('#target').click(function(e) {
alert('Handler for .click() called.');
return false;
});
Хмм ... разрешить нажатие кнопки только один раз (на протяжении всей жизни страницы), затем, возможно, использовать .data () -
Или переключить атрибут.
Что происходит, когда эта ссылка выполняет запрос ajax? Если это так, вы можете посмотреть на это
http://www.protofunc.com/scripts/jquery/ajaxManager3/ (это не версия 3.05 в репозитории, который вы, возможно, захотите взять).
У этого есть возможность остановить дублирование запросов ajax.
Также вы можете посмотреть
http://jquery.malsup.com/block/
Они нажимают на ссылку, появляется знак загрузки, и они больше не могут нажимать на эту ссылку.