更改整个文档或窗口的默认选择行为

时间:2012-05-19 18:35:41

标签: javascript jquery

有了这个,我想改变文档的默认选择行为。我使用getElmentsByTagName为文档正文执行此操作。但是代码实际上没有达到预期的效果,即阻止用户单击以选择文档中的文本。

<script>
    $(document).ready ( function () {
        document.getElementsByTagName("body").addEventListener('mousedown', function(e) { e.preventDefault(); }, false);
    });
</script>

这适用于我网站上的其他位置,以防止在特定页面元素上进行选择。我如何为整个文档执行此操作?

3 个答案:

答案 0 :(得分:0)

你的功能有错字。当您使用getElementsByTagName选择元素时,即使页面上只有一个元素,您实际上也会收到一个集合。因此,使用[0]表示您希望在集合中返回第一个body元素:

    document.getElementsByTagName("body")[0].
        addEventListener('mousedown', 
            function(e) { 
                e.preventDefault(); 
            }, false);

这当然会阻止文本被选中,以便解决您的问题。

更新:

我刚才意识到你不需要禁用点击锚标签,但我会将此留给那些想要禁用这些点击的用户。

但是,为了防止点击链接,您必须使用其他方法:

// bind click event to parent elements of anchor tags,
 // or it won't work properly
$('a').parent().each(function() {
    $(this).attr("href","#");
    $(this).unbind();
    $(this).click(function() {
        event.preventDefault();
        return false;
    });
});

答案 1 :(得分:0)

$(document).ready ( function () {
    $(document).on('mousedown', function(e) { 
        e.preventDefault(); 
    });
});​

Another answer on SO.

答案 2 :(得分:0)

发现我也可以用CSS做到这一点。

<style>
*:not(input) {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;      
}
</style>