У меня есть кнопка ссылки внутри, <td>
которую я должен отключить. Это работает в IE, но не работает в Firefox и Chrome. Структура - Ссылка внутри <td>
. Я не могу добавить какой-либо контейнер в <td>
(например, div / span)
Я попробовал все следующее, но не работал на Firefox (используя 1.4.2 js):
$(td).children().each(function () {
$(this).attr('disabled', 'disabled');
});
$(td).children().attr('disabled', 'disabled');
$(td).children().attr('disabled', true);
$(td).children().attr('disabled', 'true');
Примечание. Я не могу отменить регистрацию функции щелчка для тега привязки, поскольку он регистрируется динамически. И я должен показать ссылку в отключенном режиме.
javascript
jquery
html
css
Анкит
источник
источник
Ответы:
Вы не можете отключить ссылку (в переносном виде). Вы можете использовать один из этих методов (каждый из которых имеет свои преимущества и недостатки).
CSS способ
Это должен быть правильный способ (но см. Позже), когда большинство браузеров его поддерживают:
Это то, что делает, например, Bootstrap 3.x. В настоящее время (2016) он хорошо поддерживается только Chrome, FireFox и Opera (19+). Internet Explorer начал поддерживать это с версии 11, но не для ссылок, однако он доступен во внешнем элементе, таком как:
С участием:
Временное решение
Нам, вероятно, нужно определить класс CSS для,
pointer-events: none
но что, если мы повторно используемdisabled
атрибут вместо класса CSS? Строго говоряdisabled
, не поддерживается,<a>
но браузеры не будут жаловаться на неизвестные атрибуты. Использованиеdisabled
атрибута IE будет игнорировать,pointer-events
но оно будет учитывать специфическийdisabled
атрибут IE ; другие CSS-совместимые браузеры будут игнорировать неизвестныйdisabled
атрибут и честьpointer-events
. Проще написать, чем объяснить:Другой вариант для IE 11 - установить
display
элементы ссылки наblock
илиinline-block
:Обратите внимание, что это может быть портативное решение, если вам нужно поддерживать IE (и вы можете изменить свой HTML), но ...
Все это говорит, обратите внимание, что
pointer-events
отключает только ... указатель событий.Ссылки по-прежнему будут перемещаться через клавиатуру, тогда вам также необходимо применить один из других методов, описанных здесь.фокус
В сочетании с описанной выше техникой CSS вы можете использовать
tabindex
нестандартный способ предотвращения фокусировки элемента:Я никогда не проверял его совместимость со многими браузерами, поэтому вы можете проверить его самостоятельно, прежде чем использовать это. Преимущество работы без JavaScript. К сожалению (но очевидно)
tabindex
не может быть изменено с CSS.Перехват кликов
Используйте функцию
href
JavaScript, проверьте условие (или сам атрибут disabled) и ничего не делайте в случае.Чтобы отключить ссылки, сделайте это:
Чтобы снова включить их:
Если вы хотите вместо
.is("[disabled]")
вас, можете использовать.attr("disabled") != undefined
(jQuery 1.6+ всегда будет возвращаться,undefined
когда атрибут не установлен), ноis()
гораздо более понятен (спасибо Дейву Стюарту за этот совет). Пожалуйста, обратите внимание, что здесь я используюdisabled
атрибут нестандартным способом, если вы заботитесь об этом, тогда замените атрибут на класс и замените.is("[disabled]")
на.hasClass("disabled")
(добавление и удаление с помощьюaddClass()
иremoveClass()
).Золтан Тамаси отметил в комментарии, что «в некоторых случаях событие click уже связано с некоторой« реальной »функцией (например, с использованием knockoutjs). В этом случае упорядочение обработчика событий может вызвать некоторые проблемы. Поэтому я реализовал отключенные ссылки, связав возврат ложный обработчик по ссылке в
touchstart
,mousedown
иkeydown
события. он имеет некоторые недостатки (это предотвратит касание листания начало по ссылке)» , но обработка событий клавиатуры также имеет преимущество , чтобы предотвратить клавиатуры.Обратите внимание, что если
href
он не очищен, пользователь может вручную посетить эту страницу.Очистить ссылку
Очистить
href
атрибут. С помощью этого кода вы не добавляете обработчик событий, но изменяете саму ссылку. Используйте этот код для отключения ссылок:И этот, чтобы снова включить их:
Лично мне не очень нравится это решение (если вам не нужно больше делать с отключенными ссылками), но оно может быть более совместимым из-за различных способов перехода по ссылке.
Ложный обработчик кликов
Добавить / удалить
onclick
функцию, где выreturn false
, ссылка не будет следовать. Чтобы отключить ссылки:Чтобы снова включить их:
Я не думаю, что есть причина предпочитать это решение вместо первого.
стайлинг
Стилизация еще более проста, независимо от того, какое решение вы используете для отключения ссылки, мы добавили
disabled
атрибут, чтобы вы могли использовать следующее правило CSS:Если вы используете класс вместо атрибута:
Если вы используете UI Framework, вы можете увидеть, что отключенные ссылки не оформлены должным образом. Например, Bootstrap 3.x обрабатывает этот сценарий, и кнопка правильно стилизована как с помощью
disabled
атрибута, так и с помощью.disabled
класса. Если вместо этого вы очищаете ссылку (или используете один из других методов JavaScript), вы также должны обрабатывать стили, потому что<a>
безhref
него по-прежнему отображается как включенный.Доступные многофункциональные интернет-приложения (ARIA)
Не забудьте также включить атрибут
aria-disabled="true"
вместе сdisabled
атрибутом / классом.источник
td a
s, которые могут быть отключены, который будет вызывать,event.preventDefault()
если$(this).data('disabled')
true, и затем устанавливатьdata('disabled', true)
любую ссылку, которую я хочу отключить (false, чтобы включить и т. Д.)$(this).is('[disabled]')
может быть, лучший способ обнаружить отключенный атрибутПолучил исправление в CSS.
Выше css при применении к тегу привязки будет отключено событие click.
Для подробной информации оформите ссылку
источник
Спасибо всем, кто опубликовал решения (особенно @AdrianoRepetti), я объединил несколько подходов, чтобы предоставить более продвинутую
disabled
функциональность (и она работает в разных браузерах). Код ниже (как ES2015, так и coffeescript в зависимости от ваших предпочтений).Это обеспечивает несколько уровней защиты, поэтому якоря, помеченные как отключенные, ведут себя как таковые. Используя этот подход, вы получаете якорь, который вы не можете:
Как
Включите этот CSS, поскольку это первая линия защиты. Это предполагает, что выбранный вами селектор
a.disabled
Затем создайте экземпляр этого класса по готовности (с необязательным селектором):
Класс ES2015
npm install -S key.js
Класс Coffescript:
источник
Попробуйте элемент:
Отключение ссылки работает для меня в Chrome: http://jsfiddle.net/KeesCBakker/LGYpz/ .
Firefox, кажется, не играет хорошо. Этот пример работает:
Примечание: добавлен оператор live для будущих отключенных / включенных ссылок.
Примечание 2: изменено «вживую» на «вкл».
источник
Bootstrap 4.1 предоставляет класс с именем
disabled
иaria-disabled="true"
атрибутом.пример"
Больше на getbootstrap.com
Так что если вы хотите сделать это динамически, а
you don't want to care if it is button or ancor
в JS-скрипте вам нужно что-то подобноеНо будь осторожен
Решение работает только по ссылкам с классами
btn btn-link
.Иногда bootstrap рекомендует использовать
card-link
класс, в этом случае решение не будет работать .источник
Я закончил с решением ниже, которое может работать либо с атрибутом
<a href="..." disabled="disabled">
, либо с классом<a href="..." class="disabled">
:Стили CSS:
Javascript (в JQuery готов):
источник
Вы не можете отключить ссылку, если вы хотите, чтобы событие щелчка не срабатывало, то просто
Remove
поaction
этой ссылке.Для получения дополнительной информации: - Элементы, которые могут быть отключены
источник
Я бы сделал что-то вроде
как то так должно работать. Вы добавляете класс для ссылок, которые вы хотите отключить, а затем возвращаете false, когда кто-то нажимает на них. Чтобы включить их, просто удалите класс.
источник
Чтобы отключить ссылку для доступа к другой странице на сенсорном устройстве:
источник
setAttribute('href', '');
и URL страницы -http://example.com/page/?query=something
это ссылка, по которой вы переходите на IE11http://example.com/page/
. Обходной путь может быть использованsetAttribute('href', '#');
В Razor (.cshtml) вы можете сделать:
источник
Вы можете использовать это, чтобы отключить гиперссылку asp.net или кнопки ссылки в html.
источник
Есть еще один возможный способ, и тот, который мне нравится больше всего. По сути, это тот же самый способ, которым лайтбокс отключает целую страницу, помещая div и возясь с z-index. Вот соответствующие фрагменты из моего проекта. Это работает во всех браузерах !!!!!
Javascript (jQuery):
и в HTML
Таким образом, ресайзер находит местоположения якоря (изображения являются просто стрелками) и размещает блокировщик сверху. Изображение блокировщика представляет собой полупрозрачный серый квадрат (измените ширину / высоту блокировщиков в html в соответствии с вашей ссылкой), чтобы показать, что он отключен. Плавающее позволяет странице динамически изменять размер, и блокировщики будут следовать примеру в windowResizer (). Вы можете найти подходящие изображения через Google. Я поместил соответствующий CSS для простоты.
затем, основываясь на каком-то условии,
источник
Я думаю, что многие из них задумались. Добавьте класс того, что вы хотите, как
disabled_link
.Затем сделайте так, чтобы у CSS была
.disabled_link { display: none }
Boom, теперь пользователь не может видеть ссылку, поэтому вам не придется беспокоиться о том, что она щелкает по ней. Если они делают что - то , чтобы удовлетворить связь быть интерактивными, просто удалить класс с JQuery:
$("a.disabled_link").removeClass("super_disabled")
. Бум готов!источник
$("td a").each(function(i,v){ $(this).data('href',this.href); $(this).attr('href','#').css('color','grey'); });
Тогда, когда вы захотите сделать его неделимым:$(this).attr('href',$(this).data('href')).css('color','blue');