2012-08-10 112 views
2

IE8文本選擇問題。IE8文本選擇問題

我已經使用jquery ui並創建了一個可調整大小的div。所以基本上當我調整div文本也被選中,如果我需要再次調整大小,我需要點擊LI之外,然後再次調整大小。

我已經試過

-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 

-webkit-user-drag: none; 
-moz-user-drag: none; 
user-drag: none; 

也試過一些JS codesnippets很好,但不能把它修好。

我的小提琴:http://jsfiddle.net/svXTa/16/

任何幫助嗎?

下面是問題的圖像。

enter image description here

+0

您已經嘗試什麼都CSS3屬性。 IE8不讀取或執行它們,因爲IE8不理解CSS3。對於你的問題:在jQuery UI頁面上,演示,在IE8中試過這個,它是否也在那裏發生? – Mark 2012-08-10 07:32:56

+0

感謝您的答覆標記,但在jQuery UI網站沒有這樣的演示來測試。 – user1184100 2012-08-10 07:39:22

+0

哦。好吧,它的IE8,這個瀏覽器中有bug,我猜想瀏覽器的行爲認爲你正在選擇,而做一個調整大小。 IE8是越野車。對不起,不能幫你 – Mark 2012-08-10 07:55:57

回答

2

使用

$('ul, #dgArea').disableSelection(); 

其中初始按下鼠標在這些元件中的一個始發這將只禁用選擇。如果鼠標按鍵從別處開始,文字仍然可以突出顯示。

如果您不關心人們能夠突出顯示容器中的文字,您可以將其設置爲.container級別。

2

理想的解決辦法是使用CSS屬性user-select禁用文本選擇,其所有的供應商前綴一起:

-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 

不幸的是,CSS的解決方案是不是在IE8的支持,所以你仍然需要使用JavaScript 。

至於布蘭登建議是,jQuery UI的disableSelection()是一個選擇,但它可能有一些不良的副作用:如果你看一下jQuery UI source code,該功能的工作原理是短路onselectstart事件如果存在的話,否則將取消onmousedown 。由於onselectstart是非標準的,並且在Firefox中不受支持,因此將禁用該瀏覽器中的單擊操作,這可能不合需要。

最好的解決辦法是上述CSS和一些JavaScript的組合禁用onselectstart只有onselectstart像這樣的東西:孤獨

$("ul, #dgArea").on("selectstart", function(e) { e.preventDefault(); }); 
1

CSS不能做的工作。 這裏是一個IE8特定純JS的解決方案,很好地工作對我來說:

// test if is an old browser with lazyload optimisation 
// because I often need to test if it is IE8 
function isIE8(){ 
    var rv = -1; // Return value assumes failure. 
    var appName = navigator.appName.toLowerCase(); 

    if (appName.indexOf('nternet')*appName.indexOf('xplorer') > 1) { 
     var ua = navigator.userAgent.toLowerCase(); 
     var re = new RegExp("msie ([0-9]{1,}[\.0-9]{0,})"); 
     if (re.exec(ua)) 
      rv = parseFloat(RegExp.$1); 
    } 
    // LazyLoad optimisation 
    isIE8 = function(){return (rv == 8);}; 
    return isIE8(); // 2 : call 
} 

function disableSelection(anElt){ 
// double check because some browsers mess with navigator.appName and userAgent 
if(isIE8 && anElt.attachEvent) 
    anElt.attachEvent("onselectstart", function(){return false;}); 
} 

瞧:)

+1

非常棒!儘管IE <9的更快速檢測將是'if(document.all &&!document.addEventListener)'。 – Beejor 2015-07-08 05:44:07