Отключить якоря в Chrome / WebKit / Safari

Рассмотрим следующий код:

$("a").attr("disabled", "disabled");

В IE и FF это сделает якоря неактивными, но в браузерах на основе WebKit (Google Chrome и Safari) это ничего не дает. Хорошая особенность атрибута disabled заключается в том, что он легко удаляется и не влияет на атрибуты href и onclick.

Есть ли у вас предложения, как добиться желаемого результата. Ответы должны быть:

  • Легко откатывается, так как я хочу отключить элементы управления вводом формы, пока у меня выполняется вызов AJAX.
  • Должен работать в IE, FF и WebKit
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
7
0
5 593
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, что у вас есть обработчик события 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; }

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

функция diableForms () {$ ("ввод, кнопка, текстовое поле, a"). attr ("отключено", "отключено"). css ("курсор", "ждать"); } function enableForms () {$ ("ввод, кнопка, текстовое поле, a"). not (". disabled"). removeAttr ("disabled"). css ("курсор", ""); }

Stefan Rusek 06.10.2008 22:22

Я просто вставил используемые мной функции disableForms и enableForms. Спасибо за ваше предложение.

Stefan Rusek 06.10.2008 22:24

if (this.disabled == "disabled") будет быстрее

Sugendran 07.10.2008 08:39

на самом деле я думаю, что если (this.disabled) - мне действительно нужно проверить свои комментарии, прежде чем я их напишу

Sugendran 07.10.2008 08:39

if (this.disabled) - это то, что я использовал. У меня недостаточно кармы для редактирования постов, иначе я бы добавил кое-что из этого пост Нилла

Stefan Rusek 10.10.2008 14:37

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

$('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.

John Zabroski 12.04.2013 22:31

мне потребовалась минута, чтобы расшифровать линию splice + pop. Умный. Мне нравится, как он, по сути, удаляет последний элемент, одновременно добавляя его в начало «стека».

beauXjames 21.06.2013 23:30

Другие вопросы по теме