2012-08-10 75 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