Mam rozwijane menu nawigacyjne, w którym niektóre tytuły nie powinny przechodzić do innej strony po kliknięciu (te tytuły otwierają menu rozwijane po kliknięciu), podczas gdy inne powinny nawigować (nie mają menu rozwijanego i nawigacji bezpośrednio). typy href
zdefiniowane dla nich
Aby rozwiązać ten problem, dodałem następujący CSS dla poprzedniego typu tytułów
pointer-events: none;
i działa dobrze.Ale ponieważ ta właściwość nie jest obsługiwana przez IE, szukam obejścia. Irytujące jest to, że nie mam dostępu i uprawnień do całkowitej zmiany kodu HTML i JavaScript .
Jakieś pomysły?
pointer-events
jest teraz w IE11 +Odpowiedzi:
Pointer-events to hack Mozilli i jeśli został zaimplementowany w przeglądarkach Webkit, nie możesz oczekiwać, że zobaczysz go w przeglądarkach IE przez kolejny milion lat.
Jest jednak rozwiązanie, które znalazłem:
Przekazywanie zdarzeń myszy przez warstwy
Wykorzystuje to wtyczkę, która wykorzystuje niektóre niezbyt znane / zrozumiałe właściwości JavaScript do przejmowania zdarzenia myszy i wysyłania go do innego elementu.
Jest też inne rozwiązanie JavaScript tutaj .
Aktualizacja na październik 2013 : najwyraźniej pojawi się w IE w wersji 11. Źródło . Dzięki Tim.
źródło
"you can't expect to see it in IE browsers for another million years."
Zajęło to tylko 3 lata ...Oto kolejne rozwiązanie, które jest bardzo łatwe do zaimplementowania z 5 wierszami kodu:
Przykład:
źródło
Istnieje obejście dla IE - użyj wbudowanego SVG i ustaw pointer-events = "none" w SVG. Zobacz moją odpowiedź w artykule Jak sprawić, by program Internet Explorer emulował zdarzenia wskaźnika: brak?
źródło
Warto wspomnieć, że specjalnie dla IE
disabled=disabled
działa dla tagów kotwicy:IE traktuje to jako
disabled
element i nie wywołuje zdarzenia kliknięcia. Jednakdisabled
nie jest prawidłowym atrybutem w tagu kotwicy. Dlatego to nie zadziała w innych przeglądarkach. Do nichpointer-events:none
wymagana jest stylizacja.AKTUALIZACJA 1 : Dodanie następującej reguły wydaje mi się rozwiązaniem dla różnych przeglądarek.
AKTUALIZACJA 2 : Dla dalszej kompatybilności, ponieważ IE nie będzie tworzył stylów dla znaczników kotwicy z
disabled='disabled'
, więc nadal będą wyglądać na aktywne. Zatema:hover{}
zasada i stylizacja to dobry pomysł:Praca w Chrome, IE11 i IE8.
Oczywiście powyższy CSS zakłada, że tagi kotwicy są renderowane z
disabled="disabled"
źródło
Oto mały skrypt implementujący tę funkcję (zainspirowany artykułem na blogu Shea Frederick, o którym wspomina Kyle):
źródło
Zakryj naruszające elementy niewidocznym blokiem, używając pseudoelementu:
:before
lub:after
W ten sposób kliknięcie trafia do elementu nadrzędnego. Nie dobrze, jeśli rodzic jest klikalny, ale poza tym działa dobrze.
źródło
Spędziłem prawie dwa dni na znalezieniu rozwiązania tego problemu i wreszcie to znalazłem.
Używa javascript i jquery.
(GitHub) pointer_events_polyfill
Może to wymagać pobrania / skopiowania wtyczki javascript. Po prostu skopiuj / pobierz kody z tej strony i zapisz je jako
pointer_events_polyfill.js
. Umieść ten skrypt javascript w swojej witrynie.<script src="JS/pointer_events_polyfill.js></script>
Dodaj te skrypty jquery do swojej witryny
I nie zapomnij dołączyć swojej wtyczki jquery.
To działa! Mogę klikać elementy pod przezroczystym elementem. Używam IE 10. Mam nadzieję, że to działa również w IE 9 i poniżej.
EDYCJA: Korzystanie z tego rozwiązania nie działa po kliknięciu pól tekstowych poniżej przezroczystego elementu. Aby rozwiązać ten problem, używam fokusa, gdy użytkownik kliknie pole tekstowe.
JavaScript:
JQuery:
Umożliwia to wpisanie tekstu w polu tekstowym.
źródło
Znalazłem inne rozwiązanie tego problemu. Używam jQuery, aby ustawić
href
-attribute najavascript:;
(nie '', albo przeglądarka ponownie załaduje stronę), jeśli szerokość okna przeglądarki jest większa niż 1'000px. Musisz dodać identyfikator do swojego łącza. Oto co robię:Może to ci się przyda.
źródło
Posługiwać się
OnClientClick = "return false;"
źródło
Możesz także po prostu „nie” dodawać adresu URL w
<a>
tagu, robię to również dla menu, które są<a>
oparte na tagach za pomocą menu rozwijanych. Jeśli nie ma listy rozwijanej, dodaję adres URL, ale jeśli są listy rozwijane z<ul> <li>
listą, po prostu ją usuwam.źródło
Napotkałem podobne problemy:
Napotkałem ten problem w dyrektywie, naprawiłem go, dodając a jako element nadrzędny i tworząc zdarzenia wskaźnika: brak w tym przypadku
Powyższa poprawka nie działała dla tagu select, potem dodałem kursor: tekst (co chciałem) i zadziałało dla mnie
Jeśli potrzebny jest normalny kursor, możesz dodać kursor: default
źródło
Najlepsze rozwiązanie:
Działa doskonale we wszystkich przeglądarkach
źródło