2010-02-24 1 views
71

Ich habe ein div auf einer HTML-Seite und wenn ich die Maus drücke und es bewege, wird es zeigen, dass der Cursor nicht "fallen lassen" kann, wie er etwas auswählt. Gibt es eine Möglichkeit, die Auswahl zu deaktivieren? Ich habe versucht, CSS-Benutzer-Auswahl ohne Erfolg.Auswahl in HTML verhindern

Antwort

146

Die proprietäre Varianten von user-select werden in den meisten modernen Browsern funktionieren:

*.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; 
} 

Für IE < 10 und Opera, können Sie das unselectable Attribut des Elements Sie unselectable sein wollen verwenden müssen. Sie können diese Einstellung ein Attribut in HTML mit:

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

Leider diese Eigenschaft nicht vererbt wird, was bedeutet, müssen Sie innerhalb der <div> ein Attribut in dem Start-Tag jedes Element gesetzt. Wenn dies ein Problem ist, könnten Sie stattdessen JavaScript verwenden, um dies für ein Element Nachkommen rekursiv zu tun:

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

Ah scheint es, Firefox 3.6 funktioniert nur mit dem -moz-Präfix. – Tower

+0

Es ist nicht ausgewählt, aber immer noch in die Zwischenablage kopiert (gemäß der MDC-Spezifikation unter http://goo.gl/5P8uH) – ithkuil

+0

@ithkuil: Interessant. Sieht aus wie "-moz-none" ist der Weg zu gehen. Ich werde meine Antwort ändern. –

1

Haben Sie irgendeine Art von transparentem Bild, das Ihre Auswahl? Normalerweise wird das Symbol "Überspringen" angezeigt, wenn Sie ein Bild ziehen. Andernfalls wählt es normalerweise Text, wenn Sie ziehen. Wenn dies der Fall ist, müssen Sie das Bild möglicherweise mit z-index hinter alles stellen.

5

Ich benutze cancelBubble=true und in der Maus nach unten und verschieben Handler.

+2

Was mich gefesselt war, dass Sie es in _both_ die Maus brauchen runter und move handlers, nicht nur der move one! –

10

Es ist scheinen CSS user-select nicht Bild per Drag-and-Drop verhindern ... so ..

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

Können wir diesen Standardcode für alle Bilder verwenden? –

+0

Sie können "img" Selektor verwenden, aber seien Sie vorsichtig mit "event.preventDefault();" weil keine anderen Ereignisse, die mit "mousedown" verbunden sind, auf ihnen auf Ihrer Seite funktionieren werden ... – molokoloco

4

event.preventDefault() scheint zu tun Der Trick (getestet in IE7-9 und Chrome):

+0

Danke dafür, suchte nach einer richtigen Weise, um eine auserwählte I-Liste zu blockieren, die ich auf Klicken blockierte, da untaugliche Werte nicht Post ..... haha – thekevshow