2009-05-19 41 views

Trả lời

275
function clearSelection() { 
    if(document.selection && document.selection.empty) { 
     document.selection.empty(); 
    } else if(window.getSelection) { 
     var sel = window.getSelection(); 
     sel.removeAllRanges(); 
    } 
} 

Bạn cũng có thể áp dụng những phong cách đến khoảng cho tất cả các trình duyệt không phải IE và IE10:

span.no_selection { 
    -webkit-user-select: none; /* webkit (safari, chrome) browsers */ 
    -moz-user-select: none; /* mozilla browsers */ 
    -khtml-user-select: none; /* webkit (konqueror) browsers */ 
    -ms-user-select: none; /* IE10+ */ 
} 
+29

Có cách nào thực sự ngăn việc lựa chọn trái với việc xóa lựa chọn sau khi thực tế không? Ngoài ra, câu lệnh if thứ hai của bạn có thể nằm trong cái khác nếu để dễ đọc hơn. – David

+0

CSS trông tuyệt vời! Bất kỳ ý tưởng nếu có một cái gì đó tương tự có sẵn cho IE? – David

+0

Xin lỗi về sự lộn xộn với niềng răng; Tôi lấy mã đó từ một trang khác mà không kiểm tra. Đã sửa. Không có IE tương đương, tôi sợ. –

4

hay, trên mozilla:

document.body.onselectstart = function() { return false; } // Or any html object 

Mở IE,

document.body.onmousedown = function() { return false; } // valid for any html object as well 
+4

sollution này không cho phép chọn văn bản. – jmav

+1

@jmav Bạn sẽ phải áp dụng hàm ghi đè trên một phần tử cụ thể hơn 'document.body'. – Cypher

12

Một hàm Javascript đơn giản làm cho c ontent bên trong một trang phần tử unselectable:

function makeUnselectable(elem) { 
    if (typeof(elem) == 'string') 
    elem = document.getElementById(elem); 
    if (elem) { 
    elem.onselectstart = function() { return false; }; 
    elem.style.MozUserSelect = "none"; 
    elem.style.KhtmlUserSelect = "none"; 
    elem.unselectable = "on"; 
    } 
} 
92

Trong javascript đơn giản:

element.addEventListener('mousedown', function(e){ e.preventDefault(); }, false); 

Hoặc với jQuery:

jQuery(element).mousedown(function(e){ e.preventDefault(); }); 
+22

Vâng, tôi đã sử dụng điều này để giải quyết cùng một vấn đề mà tôi gặp phải (+1), ngoại trừ 'return false' đã sử dụng' event.preventDefault() ', không giết bất kỳ trình xử lý nào khác mà bạn có thể có trên mousedown. –

+0

Điều này không hoạt động trong IE cho tôi. –

+0

cảm ơn, nó đã giúp tôi rất nhiều! – varnie

1

Để ngăn chặn IE 8 CTRL và phím SHIFT nhấp chuột lựa chọn văn bản trên yếu tố cá nhân

var obj = document.createElement("DIV"); 
obj.onselectstart = function(){ 
    return false; 
} 

Để tránh lựa chọn văn bản trên tài liệu

window.onload = function(){ 
    document.onselectstart = function(){ 
    return false; 
    } 
} 
8

Để tránh lựa chọn văn bản chỉ sau một cú nhấp kép:

Bạn có thể sử dụng MouseEvent#detail tài sản. Đối với các sự kiện di chuột hoặc chuột, nó là 1 cộng với số lần nhấp hiện tại.

document.addEventListener('mousedown', function (event) { 
    if (event.detail > 1) { 
    event.preventDefault(); 
    } 
}, false); 

Xem https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail

+1

Điều này thật tuyệt vời! Làm việc trong Firefox 53. – Zaroth

1

Cũ chủ đề, nhưng tôi đã đưa ra một giải pháp mà tôi tin là sạch hơn vì nó không vô hiệu hóa tất cả thậm chí ràng buộc cho đối tượng, và chỉ ngăn chặn các lựa chọn văn bản ngẫu nhiên và không mong muốn trên trang. Nó là đơn giản, và hoạt động tốt cho tôi. Đây là một ví dụ; Tôi muốn ngăn việc chọn văn bản khi tôi nhấp vào một vài thời gian trên đối tượng với lớp "mũi tên phải":

$(".arrow-right").hover(function(){$('body').css({userSelect: "none"});}, function(){$('body').css({userSelect: "auto"});}); 

HTH!

0

Tôi đã gặp vấn đề tương tự. Tôi đã giải quyết nó bằng cách chuyển sang <a> và thêm onclick="return false;" (để nhấp vào nó sẽ không thêm mục nhập mới vào lịch sử trình duyệt).

Các vấn đề liên quan