2014-04-25 40 views
0

我遇到了與正在構建的站點有關的問題。JQuery未在IE8中運行

該網站的一個特點是要求提供信息的調查。一種類型的問題是「視覺選擇問題」,顯示可點擊的圖像。這些圖像對應於(隱藏)複選框,記錄他們的答案。被檢查的項目被給予邊界,這爲我們的用戶帶來了不錯的視覺體驗。

在IE8的用戶,但不能點擊圖片 - 標籤內<img>標籤是無法點擊在IE8,和:checked CSS選擇器無法使用。我們的利益相關者對IE8的體驗有所降低很好,但它必須爲他們工作。爲了讓IE8的體驗優雅地退化,我將調查包裝在僅限IE8的div(使用條件註釋,以便只有IE8及以下版本才能獲得),並寫了一行或兩行CSS,以便複選框可以可見。

不幸的是,複選框位於浮動元素之外,因此與元素所在的位置相距很遠。

我寫了一些jQuery,將分離複選框,並重新將它們附加在浮動元素內。我將這個jQuery包裝在相同的條件註釋中,在IE11的開發工具欄啓用的IE8模式下測試它,並將代碼推送到服務器。

它在真正的IE8上失敗。代碼(包括包含在條件註釋中的jQuery)適用於IE11的模擬IE8,但不適用於真實的IE8。

我能做些什麼來解決這個問題?

這是一個jsFiddle,它顯示了一個調查問題的簡化版本。 javascript面板中的代碼被封裝在最終頁面上的<!--[if lte IE 8]>標籤中。

回答

1

您使用所有這些有條件的黑客手段使解決方案過於複雜。

您只需要解決IE8面臨的一個問題,它不支持點擊標籤。

只需將標籤的點擊事件直接綁定到輸入本身,您就可以做到這一點。

這應該適合您的需求(包括jQuery加載後的某個地方)。

<!--[if lte IE 8]> 
<script type="text/javascript"> 
$(function() { 
    $("label").click(function(){ 
     if ($(this).attr("for") != "") 
      $("#" + $(this).attr("for")).click(); 
    }); 
}); 
</script> 
<![endif]--> 

重要:確保你的標籤for=""您輸入的id=""匹配。

+0

這並未完全解決問題。我不得不訴諸這些黑客的原因是因爲IE8也不支持我用來爲所選答案設置邊界的CSS技術。缺乏複選框和邊框,用戶無法知道他們的點擊是否做了任何事情。 – Jeff

+0

然後編寫一個簡單的jQuery腳本,該腳本根據選定的複選框將元素應用於元素,然後設置該類的樣式以顯示邊框。應該使用有條件的黑客作爲最後的手段。 – Axel