Рассмотрим следующий код:
$("a").attr("disabled", "disabled");
В IE и FF это сделает якоря неактивными, но в браузерах на основе WebKit (Google Chrome и Safari) это ничего не дает. Хорошая особенность атрибута disabled заключается в том, что он легко удаляется и не влияет на атрибуты href и onclick.
Есть ли у вас предложения, как добиться желаемого результата. Ответы должны быть:
Я предполагаю, что у вас есть обработчик события onclick, привязанный к этим элементам привязки. Просто попросите обработчик событий проверить атрибут «disabled» и отменить событие, если он установлен. Ваш обработчик событий будет выглядеть примерно так:
$("a").click(function(event){
if (this.disabled) {
event.preventDefault();
} else {
// make your AJAX call or whatever else you want
}
});
Вы также можете установить правило таблицы стилей для изменения курсора.
a[disabled=disabled] { cursor: wait; }
Изменить - упростила проверку «отключено», как это предлагалось в комментариях.
Я просто вставил используемые мной функции disableForms и enableForms. Спасибо за ваше предложение.
if (this.disabled == "disabled") будет быстрее
на самом деле я думаю, что если (this.disabled) - мне действительно нужно проверить свои комментарии, прежде чем я их напишу
if (this.disabled) - это то, что я использовал. У меня недостаточно кармы для редактирования постов, иначе я бы добавил кое-что из этого пост Нилла
Мне пришлось исправить это поведение на сайте с большим количеством якорей, которые были включены / отключены с помощью этого атрибута в соответствии с другими условиями и т. д. Может быть, не идеально, но в такой ситуации, если вы предпочитаете не исправлять каждый код привязки индивидуально, это подойдет для всех якорей:
$('a').each(function () {
$(this).click(function (e) {
if ($(this).attr('disabled')) {
e.preventDefault();
e.stopImmediatePropagation();
}
});
var events = $._data ? $._data(this, 'events') : $(this).data('events');
events.click.splice(0, 0, events.click.pop());
});
И:
a[disabled] {
color: gray;
text-decoration: none;
}
Вау. Это фантастика и должна быть отмечена как ОТВЕТ! Как у этого было нулевое количество голосов ?! Я начал фактически изменять текущий ответ, чтобы делать то, что вы делаете, изначально не прочитав ответ «0 голосов»! Но почему ваш селектор css не имеет [disabled = disabled], и почему бы не использовать тот же селектор в вашем jQuery.
мне потребовалась минута, чтобы расшифровать линию splice + pop. Умный. Мне нравится, как он, по сути, удаляет последний элемент, одновременно добавляя его в начало «стека».
функция diableForms () {$ ("ввод, кнопка, текстовое поле, a"). attr ("отключено", "отключено"). css ("курсор", "ждать"); } function enableForms () {$ ("ввод, кнопка, текстовое поле, a"). not (". disabled"). removeAttr ("disabled"). css ("курсор", ""); }