j查询启用/禁用文本选择错误

jQuery Enable/Disable Text Selection Error

本文关键字:文本 选择 错误 查询 启用      更新时间:2023-09-26

当用户与下拉元素(没有 href 属性的锚点)交互时,我实际上试图避免双击/三次单击时选择文本。这是我创建的插件:

.unselectable
{
    -khtml-user-select: none;
    -moz-user-select: -moz-none;
    -ms-user-select: none;
    -o-user-select: none;
    -webkit-user-select: none;
    user-select: none;
}
;(function($)
{
    $.fn.disableSelection = function()
    {
        return this.each(function()
        {
            var element = $(this);
            element.addClass('unselectable');
            element.attr('unselectable', 'on');
            element.on('selectstart', false);
        });
    };
    $.fn.enableSelection = function()
    {
        return this.each(function()
        {
            var element = $(this);
            element.removeClass('unselectable');
            element.removeAttr('unselectable', 'on');
            element.on('selectstart', true);
        });
    };
})(jQuery);
$('#menu ul li a').click(function(e)
{
    var element = $(this);
    var target = $('#submenu_' + element.attr('class'));
    element.disableSelection();
    if (target.hasClass('hidden'))
    {
        target.hide();
        target.removeClass('hidden');
    }
    target.fadeToggle(300, 'swing');
    element.enableSelection();
});

我知道这些函数在jQuery 1.9 blablabla中被弃用了,它并不介意。实际上,一切都像魅力一样,真的。但是在处理以下行时,我不断收到错误:

element.on('selectstart', true);

控制台说:

Uncaught TypeError: ((n.event.special[g.origType] || (intermediate value)).handle || g.handler).apply is not a function

如果我在 enableSelection 函数中取消注释该行,错误不再出现,并且一切都像魅力一样工作,但我真的应该努力将该事件恢复到其原始状态,否则元素在其他情况下行为不端。

你知道这有什么问题吗?

>on函数需要一个函数或false作为处理程序参数。虽然允许false作为function() { return false; }的简写,但true并非如此。

若要再次启用选择,请使用 off 删除事件处理程序。