0

我想让特定 div 的不可选择的双击等应该被阻止。

这是我尝试过的:

<div id="test" class="unselectable">asd</div>

$(document).ready(function() {
    $.ctrl = function(key, callback, args) {
        var isCtrl = false;
        $(document).keydown(function(e) {
            if (!args) args = []; // IE barks when args is null
            if (e.ctrlKey) isCtrl = true;
            if (e.keyCode == key.charCodeAt(65) && isCtrl) {
                callback.apply(this, args);
                return false;
            }
        }).keyup(function(e) {
            if (e.ctrlKey) isCtrl = false;
        });
    };

    //Other Method
    $(function() {
        $(document).keydown(function(objEvent) {
            if (objEvent.ctrlKey) {
                if (objEvent.keyCode == 65) {
                    objEvent.disableTextSelect();
                    return false;
                }
            }
        });
    });  
});​

但令我懊恼的是,我发现这行不通。我如何修改我的代码以实现我的目标?

4

3 回答 3

7

为此,您不需要 Javascript(参考答案)。做这个:

div {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
于 2012-04-22T22:56:40.357 回答
2

据我所知,没有办法阻止用户选择 div 上的文本。由于这是一个浏览器和可能与操作系统相关的功能,它超出了您通常可以使用 Javascript 操作的范围。

如果您想让您的用户感到非常烦人,您可以在整个文档上创建一个事件处理程序,以检查用户是否曾经同时按下 control-A,如果是,请尝试通过阻止默认设置来阻止选择 div行动或专注于页面的其他部分。但是,这只会让他们生气,因为您正试图阻止他们以他们想要的方式使用他们的计算机,并且可能会让他们从您的网站中脱颖而出。

您能否给我们提供更多背景信息,说明您为什么不希望用户选择某些东西?考虑到他们可以禁用 javascript/CSS 并重新加载页面,无论您做什么,总会有解决方法。如果您想让文本更难以复制粘贴,您可以制作包含所需文本的图像并将其放置在 div 中,但您仍然只是在花时间让用户对您的网站更加恼火.


虽然我不会声称我对你的整个项目非常了解以至于我可以准确地告诉你你应该做什么,但我会说可能有更好的方法来实现你所追求的任何目标。如果您发布更多详细信息,我们可能会帮助您找到它。:D

于 2012-04-22T22:55:05.180 回答
1

我已经用相当明确的答案回答了至少三个关于 SO 的类似问题。这里是最受欢迎的

我还使用来自该答案的信息更新了您的 jsFiddle,以便在 IE 中工作:http: //jsfiddle.net/VYKfL/3/

于 2012-04-22T23:15:26.410 回答