禁止文本选择,除了输入框。

4

我有一段代码可以禁用所有文本选择。如何禁用除了输入框以外的所有文本呢?我尝试使用$('* :not(input)').disableTextSelect();,但它禁用了所有内容(包括输入框)。

$.extend($.fn.disableTextSelect = function () {
                return this.each(function () {
                    if ($.browser.mozilla) {//Firefox
                        $(this).css('MozUserSelect', 'none');
                    } else if ($.browser.msie) {//IE
                        $(this).bind('selectstart', function () { return false; });
                    } else {//Opera, etc.
                        $(this).mousedown(function () { return false; });
                    }
                });
            });
            $('* :not(input)').disableTextSelect(); 

你确定 * 是必要的吗?尝试使用 $(":not(input)")。 - Ben Roux
1
请注意,禁用选择会更改浏览器的默认行为,可能会使用户感到困惑甚至烦恼。 - Felix Kling
3个回答

14
$(document).bind('mousedown selectstart', function(e) {
    return $(e.target).is('input, textarea, select, option, html');
});

感谢@user2873592提到在此处添加html 将修复Chrome滚动条无法拖动的问题。


只需将其粘贴在document.ready中,它就像魔法一样奏效了!!非常感谢@deerchao。 - Vignesh Subramanian

6

这个在IE和FF中都可以工作:

    jQuery(document).ready(function () {
        //Disable default text selection behavior
        toggleEnableSelectStart(false);

        //for inputs it must be possible to select text
        jQuery("input[type=text]").focusin(function () { toggleEnableSelectStart(true); });
        jQuery("input[type=text]").mouseover(function () { toggleEnableSelectStart(true); });
        jQuery("input[type=text]").focusout(function () { toggleEnableSelectStart(false); });
        jQuery("input[type=text]").mouseout(function () { toggleEnableSelectStart(false); });

    });

    function toggleEnableSelectStart(enable) {
        document.onmousedown = function (e) { return enable; };
        document.onselectstart = function (e) { return enable; }; ;
    }

在我的电脑上,它可以在IE、FF、Opera和Chrome上运行。 - MorningStar

1
问题似乎在于这种禁用是继承的。因此,即使您没有在$()中选择它们,它们仍然被禁用。但这也可能对我们有利。
禁用后,您可以启用输入。
$('body').css('MozUserSelect', '-moz-none');
$('input').css('MozUserSelect', 'text');

注意:值必须为“-moz-none”。如果是“none”,则无法更改。

我无法测试IE,也没有Opera的解决方案。但也许这会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接