問題描述

我有一個下拉導航選單,其中一些標題不應該導航到其他頁面,當點選 (這些標題開啟一個下拉選單,當點選),而其他人應該導航 (這些沒有下拉式清單和直接導航) 。然而,兩者型別為它們定義了 href

為瞭解決這個問題,我為前一種型別的標題新增了以下 css

pointer-events: none;

並且它工作正常。但由於此屬性不被 IE 支援,我正在尋找一些 work-around 。令人討厭的是,我沒有訪問許可權,完全改變了 HTML 和 JavaScript 程式碼。

有任何想法嗎?

最佳解決方案

Pointer-events 是一個 Mozilla 駭客,它已經在 Webkit 瀏覽器中實現,您不能指望在 IE 瀏覽器中看到另外一百萬年。

然而,我找到了一個解決方案:

Forwarding Mouse Events Through Layers

這使用一個外掛,它使用一些不太瞭解/理解的 Javascript 屬性來取代滑鼠事件並將其傳送到另一個元素。

還有另一個 Javascript 解決方案 here

2013 年 10 月的更新:顯然是在 v11 中來到 IE 。 Source 。謝謝蒂姆

次佳解決方案

有一個解決方法為 IE – 使用內聯 SVG 並設定在 SVG 中的 pointer-events = “none” 。看到我的答案在 How to make Internet Explorer emulate pointer-events:none?

第三種解決方案

這是另一個解決方案,它使用 5 行程式碼非常容易實現:

  1. 捕獲頂級元素的’mousedown’ 事件 (要關閉指標事件的元素) 。

  2. 在’mousedown’ 中隱藏頂級元素。

  3. 使用’document.elementFromPoint()’ 獲取底層元素。

  4. 取消隱藏頂部元素。

  5. 為底層元素執行所需的事件。

例:

//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;

});

第四種方案

值得一提的是,專門針對 IE,disabled=disabled 適用於錨標籤:

<a href="contact.html" onclick="unleashTheDragon();" disabled="disabled">Contact</a>

IE 將其視為 disabled 元素,不會觸發點選事件。但是,disabled 不是錨標籤上的有效屬性。因此,這在其他瀏覽器中不起作用。對於他們,pointer-events:none 在造型中是必需的。

更新 1:所以新增以下規則感覺像一個 cross-browser 解決方案給我更新 2:為了進一步的相容性,因為 IE 不會使用 disabled='disabled'形成錨標籤的樣式,所以它們仍然看起來很活躍。因此,a:hover{}規則和造型是一個好主意:

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;
        }

在 Chrome,IE11 和 IE8 上工作。當然,在 CSS 之上,假定使用 disabled="disabled"渲染錨標籤

第五種方案

這是一個實現此功能的小指令碼 (靈感來自 Kyle 提到的 Shea Frederick blog article):

第六種方案

我花了差不多兩天找到解決這個問題的辦法,最後我發現了這個問題。

這使用 javascript 和 jquery 。

(GitHub) pointer_events_polyfill

這可以使用 javascript plug-in 進行下載/複製。只需複製/下載該站點的程式碼,並將其儲存為 pointer_events_polyfill.js 。將 javascript 包含到您的網站。

<script src="JS/pointer_events_polyfill.js></script>

將此 jquery 指令碼新增到您的站點

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

並且不要忘記包括你的 jquery plug-in 。

有用!我可以點選透明元素下面的元素。我正在使用 IE 10. 我希望這也可以在 IE 9 及以下的工作。

編輯:當您單擊透明元素下方的文字框時,使用此解決方案不起作用。為瞭解決這個問題,當使用者點選文字框時,我使用焦點。

使用 Javascript:

document.getElementById("theTextbox").focus();

JQuery 的:

$("#theTextbox").focus();

這樣可以將文字輸入到文字框中。

第七種方案

用不可見塊覆蓋違規元素,使用偽元素::before:after

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

因此,您點選父元素上的地址。沒有好處,如果父母是可點選,否則可以正常工作。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇