与disableSelection函数相反,用于为特定HTML元素启用文本选择

时间:2012-01-28 14:02:56

标签: javascript text selection

我正在使用一个名为disableSelection的JavaScript函数来阻止对特定元素的文本选择。此功能声明如下:

function disableSelection(target)
{
    if (typeof target.onselectstart!="undefined") //IE route
        target.onselectstart=function(){return false}
    else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
        target.style.MozUserSelect="none"
    else //All other route (ie: Opera)
        target.onmousedown=function(){return false}
    target.style.cursor = "default"
}

我想禁用除表单元素之外的整个页面上的文本选择。如果我调用disableSelection(document.body),它将完成这项工作,但它也会禁用表单元素上的文本选择(但这只发生在Firefox上)。

我的问题是如何防止表单字段受到此文本禁用程序脚本的影响?我可以标记除表单字段之外的所有内容,但这需要付出很多努力。

我会对此表示感谢。

注意:我从here找到了disableSelection脚本。

3 个答案:

答案 0 :(得分:0)

通过从事件返回false,您将禁用浏览器的默认行为(选择文本)。我会这样修改这个函数;

function disableSelection(target, enable)
{
    if (typeof target.onselectstart!="undefined") //IE route
        target.onselectstart=function(){return enable}
    else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
        target.style.MozUserSelect=enable?"all":"none";
    else //All other route (ie: Opera)
        target.onmousedown=function(){return enable}
    target.style.cursor = "default"
}

然后把它叫做你的东西;

disableSelection(document.body, false);
disableSelection(document.forms[0], true);

应该工作(没有测试)

答案 1 :(得分:0)

脚本必须位于<body>标记下。如果你想只让div禁用:disableSelection(document.getElementById('divName'))

答案 2 :(得分:0)

这适用于我,仅在chrome中测试过:

function enableSelection(target) {
    //For IE This code will work
    if(typeof target.onselectstart != "undefined") {
        target.onselectstart = function() {
            return true;
        }
    }

    //For Firefox This code will work
    else if(typeof target.style.MozUserSelect != "undefined") {
        target.style.MozUserSelect = "all";
    }

    //All other  (ie: Opera) This code will work
    else {
        target.onmousedown = function() {
            return true;
        }
        target.style.cursor = "default";
    }
}