2010-02-24 18 views
71

Mam div na stronie HTML i za każdym razem, gdy naciśnie mysz i przenieść, pokaże, że "nie można upuścić" kursor jak coś wybiera. Czy istnieje sposób wyłączenia selekcji? Próbowałem wybrać użytkownika CSS bez żadnego sukcesu.Zapobieganie zaznaczeniu w HTML

Odpowiedz

146

Własne odmiany user-select będzie działać w większości nowoczesnych przeglądarek:

*.unselectable { 
    -moz-user-select: -moz-none; 
    -khtml-user-select: none; 
    -webkit-user-select: none; 

    /* 
    Introduced in IE 10. 
    See http://ie.microsoft.com/testdrive/HTML5/msUserSelect/ 
    */ 
    -ms-user-select: none; 
    user-select: none; 
} 

dla IE < 10 i Opera, trzeba będzie użyć atrybutu elementu chcesz być Nie można wybrać unselectable. Można ustawić to za pomocą atrybutu w HTML:

<div id="foo" unselectable="on" class="unselectable">...</div> 

Niestety ta właściwość nie jest dziedziczona, co oznacza, że ​​trzeba umieścić atrybut w znaczniku początku każdego elementu wewnątrz <div>. Jeśli jest to problem, można zamiast tego użyć JavaScript, aby to zrobić rekursywnie dla potomnych elementu za:

function makeUnselectable(node) { 
    if (node.nodeType == 1) { 
     node.setAttribute("unselectable", "on"); 
    } 
    var child = node.firstChild; 
    while (child) { 
     makeUnselectable(child); 
     child = child.nextSibling; 
    } 
} 

makeUnselectable(document.getElementById("foo")); 
+0

Ach, wygląda na to, że Firefox 3.6 działa tylko z prefiksem -moz-. – Tower

+0

to nie jest zaznaczone, ale nadal kopiowane do schowka (zgodnie ze specyfikacją MDC na http://goo.gl/5P8uH) – ithkuil

+0

@ithkuil: Interesujące. Wygląda na to, że '-moz-none' jest do zrobienia. Zmienię moją odpowiedź. –

1

Jeżeli masz jakieś przejrzysty obraz, że wybierający? Zwykle podczas przeciągania obrazu pojawia się ikona "cant drop". W przeciwnym razie normalnie wybiera tekst po przeciągnięciu. Jeśli tak, być może będziesz musiał umieścić obraz za wszystkim używając z-index.

5

Używam cancelBubble=true i stopPropagation() w myszce w dół i przenoszę obsługę.

+2

Co mnie złapało to, że potrzebujesz go w narzędziu? poruszyć i przenieść manipulatory, a nie tylko przenieść! –

10

To wydaje użytkownik-select CSS nie zapobiegają obrazu przeciągnij i upuść ... tak ..

HTML:

<img src="ico.png" width="20" height="20" alt="" unselectable="on" /> Blabla bla blabla 

CSS:

* { 
    user-select: none; 
    -khtml-user-select: none; 
    -o-user-select: none; 
    -moz-user-select: -moz-none; 
    -webkit-user-select: none; 
} 

::selection { background: transparent;color:inherit; } 
::-moz-selection { background: transparent;color:inherit; } 

JS:

$(function(){ 
    $('*:[unselectable=on]').mousedown(function(event) { 
     event.preventDefault(); 
     return false; 
    }); 
}); 
+0

Czy możemy użyć tego domyślnego kodu dla wszystkich obrazów? –

+0

Możesz użyć selektora "img", ale zachowaj ostrożność przy "event.preventDefault();" ponieważ żadne inne zdarzenia związane z "mousedown" nie będą działały na nich na twojej stronie ... – molokoloco

4

event.preventDefault() wydaje się robić trik (testowany w IE7-9 i Chrome):

jQuery('#slider').on('mousedown', function (e) { 
    var handler, doc = jQuery(document); 
    e.preventDefault(); 
    doc.on('mousemove', handler = function (e) { 
     e.preventDefault(); 
     // refresh your screen here 
    }); 
    doc.one('mouseup', function (e) { 
     doc.off('mousemove', handler); 
    }); 
}); 
+0

Dziękuję za to, szukaliście czasu na właściwy sposób, aby zablokować wybraną listę I, którą blokowałem przy kliknięciu, ponieważ wyłączone wartości nie post ..... haha – thekevshow

Powiązane problemy