2009-05-19 19 views

Odpowiedz

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

Można również zastosować te style do rozpiętości dla wszystkich przeglądarek innych niż IE i 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

Czy istnieje sposób, aby rzeczywiście zapobiec selekcji, a nie usunąć zaznaczenie po fakcie? Także twoje drugie zdanie może znajdować się wewnątrz innego, jeśli jest dla lepszej czytelności. – David

+0

CSS wygląda świetnie! Masz pomysł, czy jest coś podobnego do IE? – David

+0

Przepraszam za bałagan z aparatami ortodontycznymi; Złapałem ten kod z innej strony bez sprawdzania. Naprawiony. Nie ma żadnego odpowiednika IE, obawiam się. –

4

albo na Mozilla:

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

na IE,

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

sollution to nie pozwala wybieranie tekstu w ogóle. – jmav

+1

@jmav Musisz zastąpić funkcję bardziej konkretnym elementem niż 'document.body'. – Cypher

12

Prosta funkcja JavaScript, która powoduje, że c ontent wewnątrz page-elementu Nie można wybrać:

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

w prostym javascript:

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

lub jQuery:

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

Tak, użyłem tego, aby rozwiązać ten sam problem, który miałem (+1), z wyjątkiem zamiast 'return false' użyłem' event.preventDefault() ', które nie zabija żadnych innych procedur obsługi, które możesz mieć na mousedown. –

+0

To nie działa w IE dla mnie. –

+0

dzięki, bardzo mi to pomogło! – varnie

1

Aby zapobiec IE 8 CTRL i SHIFT kliknij zaznaczenie tekstu na poszczególnego pierwiastka

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

Aby zapobiec zaznaczenie tekstu na dokumencie

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

Aby zablokować możliwość wyboru tylko tekst po podwójnym kliknięciem:

Można użyć MouseEvent#detail nieruchomości. Dla zdarzeń mousedown lub mouseup jest to 1 plus aktualna liczba kliknięć.

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

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

+1

To jest niesamowite! Działa w przeglądarce Firefox 53. – Zaroth

1

stary wątek, ale wpadłem na rozwiązanie, które moim zdaniem jest czystsze, ponieważ nie wyłącza każdy nawet związany z przedmiotem, a jedynie zapobiec przypadkowe i niechciane pozycje tekstowe na strona. Jest to proste i działa dobrze dla mnie. Oto przykład; Chcę zapobiec text-wybór, gdy klikam kilka razy na obiekt z klasą „strzałki prawej”:

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

HTH!

0

Miałem ten sam problem. Rozwiązałem go, przełączając na <a> i dodając onclick="return false;" (tak, że kliknięcie go nie doda nowego wpisu do historii przeglądarki).

Powiązane problemy