css ‘pointer-events’ Eigenschaftsalternative für IE
Lesezeit: 6 Minuten
Anupam
Ich habe ein Dropdown-Navigationsmenü, in dem einige der Titel beim Anklicken nicht zu einer anderen Seite navigieren sollten (diese Titel öffnen beim Anklicken ein Dropdown-Menü), während andere navigieren sollten (diese haben kein Dropdown-Menü und navigieren direkt). Typen haben href für sie definiert
Um dies zu lösen, habe ich das folgende CSS für den früheren Titeltyp hinzugefügt
pointer-events: none;
und es funktioniert gut. Da diese Eigenschaft jedoch nicht vom IE unterstützt wird, suche ich nach einer Problemumgehung. Das nervige ist das Ich habe keinen Zugriff und keine Berechtigung, den HTML- und JavaScript-Code zu ändern vollständig.
Irgendwelche Ideen?
Gibt es eine Möglichkeit, auf HTML und Skripte zuzugreifen? Versuchen Sie, mit demjenigen zu sprechen, der Ihnen die Aufgabe gegeben hat.
– Kyle
2. Mai 2011 um 8:55 Uhr
@Kyle Es ist nicht gerade ein Problem der Berechtigung, es gibt auch einige technische Schwierigkeiten, den HTML/Javascript-Code zu ändern
– Anupam
2. Mai 2011 um 8:57 Uhr
Hier ist die Antwort: stackoverflow.com/questions/3680429/…
– Sanket Sahu
11. Mai 2012 um 8:49 Uhr
stackoverflow.com/questions/3680429/…
– Sanket Sahu
11. Mai 2012 um 8:50 Uhr
Beachten Sie, dass pointer-events ist jetzt in IE11+
– David Storey
18. September 2014 um 7:33 Uhr
Kyle
Pointer-Events ist ein Mozilla-Hack, und wo es in Webkit-Browsern implementiert wurde, können Sie nicht erwarten, es in IE-Browsern für eine weitere Million Jahre zu sehen.
Es gibt jedoch eine Lösung, die ich gefunden habe:
Dies verwendet ein Plugin, das einige nicht bekannte/verstandene Eigenschaften von Javascript verwendet, um das Mausereignis zu nehmen und es an ein anderes Element zu senden.
Aktualisierung für Oktober 2013: anscheinend kommt es in v11 zum IE. Quelle. Danke Tim.
Die Dokumentation von ie9 besagt, dass es diese Eigenschaft unterstützt (ich habe ie9 jedoch noch nicht ausprobiert). Wie auch immer, ich hatte bereits Ideen im Kopf, die in den Links angegeben sind, aber da ich nach einer CSS-spezifischen Lösung suchte, kann ich sie nicht verwenden. Ich werde versuchen, den HTML/JS-Code zu ändern, anstatt Zeit mit diesem Problem zu verbringen. Vielen Dank für Ihre Zeit und Hilfe
– Anupam
2. Mai 2011 um 9:16 Uhr
Beim W3C ging dieses Problem verloren wird wegen Click-Hijacking diskutiert. Faustregel: Sobald das W3C die Kandidatenempfehlung veröffentlicht, wird das IE-Team sie umsetzen und es gibt immer eine Lektion Eile mit Weile. Außerdem Mozilla Sagte alles “Warnung:Die Verwendung von Zeigerereignissen in CSS für Nicht-SVG-Elemente ist experimentell. Das Feature war früher Teil der CSS3-UI-Entwurfsspezifikation, wurde aber aufgrund vieler offener Probleme auf CSS4 verschoben.“
"you can't expect to see it in IE browsers for another million years." Hat nur 3 Jahre gedauert…
– ProblemsOfSumit
17. Juni 2014 um 8:07 Uhr
@KyleSevenoaks Ich denke, jeder hat Microsoft unterschätzt. Die aktuelle IE-Entwicklung ist großartig, insbesondere status.modern.ie. Sie müssen nur IE8 und 9 so schnell wie möglich töten und wir sind bereit, in den süßen Himmel der modernen Entwicklung zu gehen!
– ProblemsOfSumit
17. Juni 2014 um 13:42 Uhr
Hier ist eine weitere Lösung, die mit 5 Zeilen Code sehr einfach zu implementieren ist:
Erfassen Sie das ‘Mousedown’-Ereignis für das oberste Element (das Element, für das Sie Zeigerereignisse deaktivieren möchten).
Verstecken Sie im ‘Mousedown’ das oberste Element.
Verwenden Sie „document.elementFromPoint()“, um das zugrunde liegende Element abzurufen.
Blenden Sie das oberste Element ein.
Führen Sie das gewünschte Ereignis für das zugrunde liegende Element aus.
Beispiel:
//This is an IE fix because pointer-events does not work in IE
$(document).on('mousedown', '.TopElement', function (e) {
$(this).hide();
var BottomElement = document.elementFromPoint(e.clientX, e.clientY);
$(this).show();
$(BottomElement).mousedown(); //Manually fire the event for desired underlying element
return false;
});
Das hat bei mir funktioniert. Ich bevorzuge kleine Korrekturen, die ich in meinen js-Code einfügen kann, anstatt viele Polyfills hinzuzufügen;)
– Dippas
11. Dezember 2014 um 11:48 Uhr
Das ist eine kreative Lösung, gefällt mir. Das einzige Problem ist, dass dies Browsern unnötige Verarbeitung hinzufügt, in denen die Punktereignisse tun Arbeit. Es wäre großartig, wenn dies nur bedingt von IE-Browsern ausgeführt werden könnte.
– Trevor
16. Januar 2015 um 19:04 Uhr
Ich stimme zu, es ist ein schnell zu implementierendes Problem, aber tatsächlich wende ich es in meiner Implementierung nur an, wenn der Browser IE ist, platzieren Sie es in dieser Überprüfung: if (navigator.appName == ‘Microsoft Internet Explorer’ ) { … Logik gehört hier .. }
– MarzSocks
17. Januar 2015 um 6:56 Uhr
das funktioniert sehr gut! da ie 11 angeblich begonnen hat, Zeigerereignisse zu unterstützen, schließe ich es einfach in diese Klausel ein: if (navigator.userAgent.toLowerCase().indexOf(‘msie’) > 0) DANKE!
– Hanke
21. August 2015 um 16:40 Uhr
obiuquido144
Es gibt eine Problemumgehung für IE – verwenden Sie Inline-SVG und setzen Sie pointer-events=”none” in SVG. Siehe meine Antwort in Wie man Internet Explorer dazu bringt, Pointer-Events zu emulieren: keine?
Niks
Es ist erwähnenswert, dass speziell für IE, disabled=disabled funktioniert für Anker-Tags:
IE behandelt dies als eine disabled -Element und löst kein Klickereignis aus. Aber, disabled ist kein gültiges Attribut für ein Anker-Tag. Daher funktioniert dies nicht in anderen Browsern. Für Sie pointer-events:none ist im Styling erforderlich.
AKTUALISIERUNG 1: Das Hinzufügen der folgenden Regel fühlt sich für mich wie eine Cross-Browser-Lösung an
AKTUALISIERUNG 2: Zur weiteren Kompatibilität, da IE keine Stile für Anker-Tags mit bildet disabled='disabled'also werden sie es immer noch sehen aktiv. Daher, a:hover{} Regel und Styling ist eine gute Idee:
Dies könnte ein Javascript-Plug-in zum Herunterladen/Kopieren verwenden. Kopieren/laden Sie einfach die Codes von dieser Seite herunter und speichern Sie sie unter pointer_events_polyfill.js. Binden Sie dieses Javascript in Ihre Website ein.
Und vergessen Sie nicht, Ihr jquery-Plug-in einzuschließen.
Es klappt! Ich kann Elemente unter dem transparenten Element anklicken. Ich verwende IE 10. Ich hoffe, dass dies auch in IE 9 und darunter funktionieren kann.
BEARBEITEN: Die Verwendung dieser Lösung funktioniert nicht, wenn Sie auf die Textfelder unter dem transparenten Element klicken. Um dieses Problem zu lösen, verwende ich den Fokus, wenn der Benutzer auf das Textfeld klickt.
Javascript:
document.getElementById("theTextbox").focus();
JQuery:
$("#theTextbox").focus();
Auf diese Weise können Sie den Text in das Textfeld eingeben.
9232400cookie-checkcss ‘pointer-events’ Eigenschaftsalternative für IEyes
Gibt es eine Möglichkeit, auf HTML und Skripte zuzugreifen? Versuchen Sie, mit demjenigen zu sprechen, der Ihnen die Aufgabe gegeben hat.
– Kyle
2. Mai 2011 um 8:55 Uhr
@Kyle Es ist nicht gerade ein Problem der Berechtigung, es gibt auch einige technische Schwierigkeiten, den HTML/Javascript-Code zu ändern
– Anupam
2. Mai 2011 um 8:57 Uhr
Hier ist die Antwort: stackoverflow.com/questions/3680429/…
– Sanket Sahu
11. Mai 2012 um 8:49 Uhr
stackoverflow.com/questions/3680429/…
– Sanket Sahu
11. Mai 2012 um 8:50 Uhr
Beachten Sie, dass
pointer-events
ist jetzt in IE11+– David Storey
18. September 2014 um 7:33 Uhr