W środku <td>
mam przycisk linku, który muszę wyłączyć. Działa to w IE, ale nie działa w Firefox i Chrome. Struktura jest - Link wewnątrz <td>
. Nie mogę dodać żadnego kontenera do <td>
(jak div / span)
Próbowałem wszystkich poniższych czynności, ale nie działałem w przeglądarce Firefox (używając wersji 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');
Uwaga - Nie mogę wyrejestrować funkcji kliknięcia dla tagu kotwicy, ponieważ jest ona rejestrowana dynamicznie. I MUSZĘ POKAZAĆ LINK W TRYBIE WYŁĄCZONYM.
javascript
jquery
html
css
Ankit
źródło
źródło
Odpowiedzi:
Nie możesz wyłączyć linku (w przenośny sposób). Możesz użyć jednej z tych technik (każda ma swoje zalety i wady).
Sposób CSS
Powinien to być właściwy sposób (ale zobacz później), aby to zrobić, gdy większość przeglądarek będzie go obsługiwać:
Tak działa na przykład Bootstrap 3.x. Obecnie (2016) jest dobrze obsługiwany tylko przez Chrome, FireFox i Opera (19+). Internet Explorer zaczął obsługiwać to od wersji 11, ale nie dla linków, jednak jest dostępny w elemencie zewnętrznym, takim jak:
Z:
Obejście
My, prawdopodobnie, trzeba zdefiniować klasę CSS
pointer-events: none
ale co jeśli mamy ponowne tendisabled
atrybut zamiast klasy CSS? Ściśle mówiąc,disabled
nie jest obsługiwane,<a>
ale przeglądarki nie będą narzekać na nieznane atrybuty. Użyciedisabled
atrybutu IE zignoruje,pointer-events
ale będzie honorować określonydisabled
atrybut IE ; inne przeglądarki zgodne z CSS zignorują nieznanydisabled
atrybut i honorpointer-events
. Łatwiej pisać niż wyjaśniać:Inną opcją dla IE 11 jest zestaw
display
elementów łącza doblock
lubinline-block
:Pamiętaj, że może to być przenośne rozwiązanie, jeśli potrzebujesz obsługi IE (i możesz zmienić swój HTML), ale ...
Wszystko to powiedział, proszę pamiętać, że
pointer-events
wyłącza tylko ... zdarzenia wskaźnika. Łącza będą nadal można nawigować za pomocą klawiatury, wówczas musisz również zastosować jedną z innych opisanych tutaj technik.Skupiać
W połączeniu z opisaną powyżej techniką CSS możesz użyć
tabindex
w niestandardowy sposób, aby zapobiec koncentracji elementu:Nigdy nie sprawdzałem jego kompatybilności z wieloma przeglądarkami, więc możesz przetestować go sam przed użyciem. Ma tę zaletę, że działa bez JavaScript. Niestety (ale oczywiście)
tabindex
nie można go zmienić z CSS.Przechwytuj kliknięcia
Użyj
href
funkcji JavaScript, sprawdź warunek (lub sam wyłączony atrybut) i nic nie rób.Aby wyłączyć łącza, wykonaj następujące czynności:
Aby je ponownie włączyć:
Jeśli chcesz zamiast tego
.is("[disabled]")
możesz użyć.attr("disabled") != undefined
(jQuery 1.6+ zawsze zwróci,undefined
gdy atrybut nie jest ustawiony), aleis()
jest znacznie bardziej przejrzysty (dzięki Dave'owi Stewartowi za tę wskazówkę). Należy pamiętać, tutaj używamdisabled
atrybut w niestandardowy sposób, jeśli dbasz o to następnie zastąpić atrybut z klasą i wymienić.is("[disabled]")
z.hasClass("disabled")
(dodawanie i usuwanie zaddClass()
aremoveClass()
).Zoltán Tamási zauważył w komentarzu, że „w niektórych przypadkach zdarzenie kliknięcia jest już powiązane z jakąś„ rzeczywistą ”funkcją (na przykład za pomocą knockoutjs). W takim przypadku zamawianie procedury obsługi zdarzeń może powodować pewne problemy. Dlatego zaimplementowałem wyłączone linki, wiążąc zwrot false obsługi do tego linku
touchstart
,mousedown
ikeydown
wydarzeń. to ma pewne wady (uniemożliwi to dotykowy przewijania rozpoczęto link)” ale obsługi zdarzeń klawiaturowych ma również korzyści, aby zapobiec nawigację za pomocą klawiatury.Pamiętaj, że jeśli
href
nie zostanie wyczyszczone, użytkownik może ręcznie odwiedzić tę stronę.Wyczyść link
Wyczyść
href
atrybut. Za pomocą tego kodu nie dodajesz modułu obsługi zdarzeń, ale zmieniasz sam link. Użyj tego kodu, aby wyłączyć linki:A ten, aby je ponownie włączyć:
Osobiście nie podoba mi się to rozwiązanie (jeśli nie musisz robić więcej z wyłączonymi linkami), ale może być bardziej kompatybilne z powodu różnych sposobów podążania za linkiem.
Fałszywy moduł obsługi kliknięć
Dodaj / usuń
onclick
funkcję, w którejreturn false
link nie będzie śledzony. Aby wyłączyć linki:Aby je ponownie włączyć:
Nie sądzę, aby istniał powód, aby preferować to rozwiązanie zamiast pierwszego.
Stylizacja
Stylizacja jest jeszcze prostsza, bez względu na to, jakiego rozwiązania użyjesz do wyłączenia łącza, dodaliśmy
disabled
atrybut, dzięki czemu możesz użyć następującej reguły CSS:Jeśli używasz klasy zamiast atrybutu:
Jeśli używasz frameworku interfejsu użytkownika, możesz zauważyć, że wyłączone linki nie są poprawnie stylizowane. Na przykład Bootstrap 3.x obsługuje ten scenariusz, a przycisk ma poprawną stylizację zarówno z
disabled
atrybutem, jak iz.disabled
klasą. Jeśli zamiast tego usuwasz link (lub używasz jednej z innych technik JavaScript), musisz również obsługiwać stylizację, ponieważ<a>
bezhref
jest nadal malowane jako włączone.Dostępne bogate aplikacje internetowe (ARIA)
Nie zapomnij również dołączyć atrybutu
aria-disabled="true"
wraz zdisabled
atrybutem / klasą.źródło
td a
s, które mogą być wyłączone, który zadzwonievent.preventDefault()
, jeśli$(this).data('disabled')
jest prawdziwa, a następnie ustawićdata('disabled', true)
na dowolny link Chcę wyłączyć (false, aby umożliwić, etc.)$(this).is('[disabled]')
może być lepszym sposobem na wykrycie wyłączonego atrybutuMam poprawkę w css.
Powyżej css po zastosowaniu do tagu zakotwiczenia spowoduje wyłączenie zdarzenia kliknięcia.
Aby uzyskać szczegółowe informacje, sprawdź ten link
źródło
Dzięki wszystkim, którzy opublikowali rozwiązania (szczególnie @AdrianoRepetti), połączyłem wiele metod, aby zapewnić bardziej zaawansowane
disabled
funkcje (i działa w różnych przeglądarkach). Kod znajduje się poniżej (zarówno ES2015, jak i coffeescript w zależności od preferencji).Zapewnia to wiele poziomów obrony, dzięki czemu Kotwice oznaczone jako wyłączone faktycznie zachowują się jako takie. Stosując to podejście, otrzymujesz kotwicę, której nie możesz:
Jak
Dołącz ten css, ponieważ jest to pierwsza linia obrony. Zakłada się, że używany jest selektor
a.disabled
Następnie utwórz instancję tej klasy w trybie gotowości (z opcjonalnym selektorem):
Klasa ES2015
npm install -S key.js
Klasa Coffescript:
źródło
Wypróbuj element:
Wyłączenie linku działa dla mnie w Chrome: http://jsfiddle.net/KeesCBakker/LGYpz/ .
Firefox wydaje się nie grać dobrze. Ten przykład działa:
Uwaga: dodano instrukcję „na żywo” dla przyszłych wyłączonych / włączonych łączy.
Uwaga 2: zmieniono „na żywo” na „na”.
źródło
Bootstrap 4.1 zapewnia klasę o nazwie
disabled
iaria-disabled="true"
atrybucie.przykład"
Więcej znajduje się na getbootstrap.com
Więc jeśli chcesz zrobić to dynamicznie, a
you don't want to care if it is button or ancor
niż w skrypcie JS potrzebujesz czegoś takiegoAle bądź ostrożny
Rozwiązanie działa tylko w przypadku łączy z klasami
btn btn-link
.Czasami bootstrap zaleca użycie
card-link
klasy, w takim przypadku rozwiązanie nie będzie działać .źródło
Skończyło się na poniższym rozwiązaniu, które może współpracować z atrybutem
<a href="..." disabled="disabled">
lub klasą<a href="..." class="disabled">
:Style CSS:
JavaScript (w jQuery gotowy):
źródło
nie można wyłączyć link, jeśli chcesz, że zdarzenie click nie powinien strzelać po prostu z tego linku.
Remove
action
Więcej informacji: - Elementy, które można wyłączyć
źródło
Zrobiłbym coś takiego
coś takiego powinno działać. Dodajesz klasę dla linków, które chcesz wyłączyć, a następnie zwracasz wartość false, gdy ktoś je kliknie. Aby je włączyć, po prostu usuń klasę.
źródło
Aby wyłączyć link, aby uzyskać dostęp do innej strony na urządzeniu dotykowym:
źródło
setAttribute('href', '');
i adres strony tohttp://example.com/page/?query=something
link po kliknięciu na IE11, by przejść dohttp://example.com/page/
. Obejściem może być użyciesetAttribute('href', '#');
W Razor (.cshtml) możesz:
źródło
Możesz go użyć do wyłączenia hiperłącza asp.net lub przycisków linków w html.
źródło
Jest jeszcze jeden możliwy sposób, który najbardziej mi się podoba. Zasadniczo jest to ten sam sposób, w jaki lightbox wyłącza całą stronę, umieszczając div i majstrując przy indeksie Z. Oto odpowiednie fragmenty mojego projektu. Działa to we wszystkich przeglądarkach !!!!!
JavaScript (jQuery):
i w html
Więc resizer znajduje lokalizacje kotwicy (obrazy to tylko strzałki) i umieszcza wyłącznik na górze. Obraz wyłącznika to półprzezroczysty szary kwadrat (zmień szerokość / wysokość blokad w html, aby dopasować do linku), aby pokazać, że jest wyłączony. Liczba zmiennoprzecinkowa pozwala dynamicznie zmieniać rozmiar strony, a wyłączniki będą podążać w tym samym kierunku w windowResizer (). Odpowiednie obrazy można znaleźć w Google. Dla uproszczenia umieściłem odpowiedni plik CSS.
następnie w oparciu o jakiś warunek,
źródło
Myślę, że wiele z nich jest nad myśleniem. Dodaj klasę, co chcesz
disabled_link
.Następnie spraw, aby css miał
.disabled_link { display: none }
Boom, teraz użytkownik nie widzi linku, więc nie będziesz musiał się martwić, że go kliknie. Jeśli robią coś, aby zaspokoić link jest klikalny, wystarczy usunąć klasy z jQuery:
$("a.disabled_link").removeClass("super_disabled")
. Boom gotowy!źródło
$("td a").each(function(i,v){ $(this).data('href',this.href); $(this).attr('href','#').css('color','grey'); });
Następnie, jeśli chcesz ją wyłączyć:$(this).attr('href',$(this).data('href')).css('color','blue');