css ‘pointer-events’ Eigenschaftsalternative für IE

Lesezeit: 6 Minuten

css pointer events Eigenschaftsalternative fur IE
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


1646309528 835 css pointer events Eigenschaftsalternative fur IE
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:

Weiterleitung von Mausereignissen durch Ebenen

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.

Es gibt auch eine andere Javascript-Lösung Hier.

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 allesWarnung: 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.

    – Vulkanrabe

    28. September 2012 um 7:40 Uhr

  • Laut caniuse.com kommen CSS-Pointer-Events in IE 11. caniuse.com/#feat=pointer-events

    – Tim

    3. Oktober 2013 um 22:01 Uhr


  • "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:

  1. Erfassen Sie das ‘Mousedown’-Ereignis für das oberste Element (das Element, für das Sie Zeigerereignisse deaktivieren möchten).
  2. Verstecken Sie im ‘Mousedown’ das oberste Element.
  3. Verwenden Sie „document.elementFromPoint()“, um das zugrunde liegende Element abzurufen.
  4. Blenden Sie das oberste Element ein.
  5. 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


css pointer events Eigenschaftsalternative fur IE
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?

css pointer events Eigenschaftsalternative fur IE
Niks

Es ist erwähnenswert, dass speziell für IE, disabled=disabled funktioniert für Anker-Tags:

<a href="https://stackoverflow.com/questions/5855135/contact.html" onclick="unleashTheDragon();" disabled="disabled">Contact</a>

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:

a[disabled="disabled"] {
        pointer-events: none; /* this is enough for non-IE browsers */
        color: darkgrey;      /* IE */
    }
        /* IE - disable hover effects */   
        a[disabled="disabled"]:hover {
            cursor:default;
            color: darkgrey;
            text-decoration:none;
        }

Funktioniert mit Chrome, IE11 und IE8.
Natürlich geht CSS davon aus, dass Anker-Tags mit gerendert werden disabled="disabled"

Hier ist ein kleines Skript, das diese Funktion implementiert (inspiriert von der Blogartikel von Shea Frederick die Kyle erwähnt):

  • Das funktioniert nicht, wenn die Elemente Anchor-Tags sind, glaube ich. Zumindest hat es bei mir nicht funktioniert.

    – Colin DeClue

    12. August 2013 um 20:16 Uhr

1646309529 586 css pointer events Eigenschaftsalternative fur IE
Graham P Heath

Decken Sie die anstößigen Elemente mit einem unsichtbaren Block ab, indem Sie ein Pseudoelement verwenden: :before oder :after

a:before {
//IE No click hack by covering the element.
  display:block;
  position:absolute;
  height:100%;
  width:100%;
  content:' ';
}

Somit landet Ihr Klick auf dem übergeordneten Element. Nicht gut, wenn das übergeordnete Element anklickbar ist, aber ansonsten gut funktioniert.

  • Das funktioniert nicht, wenn die Elemente Anchor-Tags sind, glaube ich. Zumindest hat es bei mir nicht funktioniert.

    – Colin DeClue

    12. August 2013 um 20:16 Uhr

Ich habe fast zwei Tage damit verbracht, die Lösung für dieses Problem zu finden, und ich habe sie endlich gefunden.

Dies verwendet Javascript und jquery.

(GitHub) pointer_events_polyfill

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.

<script src="https://stackoverflow.com/questions/5855135/JS/pointer_events_polyfill.js></script>

Fügen Sie diese JQuery-Skripte zu Ihrer Website hinzu

$(document).ready(function(){
    PointerEventsPolyfill.initialize({});
});

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.

923240cookie-checkcss ‘pointer-events’ Eigenschaftsalternative für IE

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy