最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - disable text selection except input - Stack Overflow

programmeradmin0浏览0评论

I've got this snippet of code to disable all text selection. How would I go about disabling all text except for input? I tried $('* :not(input)').disableTextSelect(); but it disabled selection for everything (input included)

$.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(); 

I've got this snippet of code to disable all text selection. How would I go about disabling all text except for input? I tried $('* :not(input)').disableTextSelect(); but it disabled selection for everything (input included)

$.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(); 
Share Improve this question edited Mar 1, 2012 at 1:00 fbernardo 10.1k3 gold badges34 silver badges46 bronze badges asked Jun 9, 2011 at 22:17 MorningStarMorningStar 1761 gold badge4 silver badges16 bronze badges 2
  • Are you sure the * is necessary? Try $(":not(input)") – Ben Roux Commented Jun 9, 2011 at 22:21
  • 1 Note that disabling selection changes the default behaviour of the browser and will confuse or even annoy the user. – Felix Kling Commented Jun 9, 2011 at 22:24
Add a comment  | 

3 Answers 3

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

Thanks to @user2873592, who mentioned that adding html here would fix the chrome scroll bar can't be dragged issue.

This works in IE and 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; }; ;
    }

The problem seems to be that this disabling is inherited. So, even though you aren't selected them in the $() they still get disabled. But this can also be in our favor.

After disabling, you can enable the inputs.

$('body').css('MozUserSelect', '-moz-none');
$('input').css('MozUserSelect', 'text');

NOTE: the value must be '-moz-none'. If 'none', it can't be changed.

I can't test IE nor do I have a solution for Opera. But maybe this will help part way.

发布评论

评论列表(0)

  1. 暂无评论