2012-06-28 4 views
17

Ich habe gesehen/gehört alles über die Deaktivierung der Textauswahl mit den Variationen von user-select, aber keiner von denen für das Problem, das ich habe. Auf Android (und ich vermute auf dem iPhone), wenn Sie auf Text tippen und halten, wird er hervorgehoben und es werden kleine Markierungen zum Ziehen und Auswählen von Text angezeigt. Ich muss diejenigen deaktivieren (siehe Bild):Mobile Web - Lang-berühren/Tapphold Textauswahl deaktivieren

screenshot

ich ohne Erfolg -webkit-touch-callout versucht haben, und sogar versucht, Dinge wie $('body').on('select',function(e){e.preventDefault();return;}); ohne Erfolg. Und die billigen Tricks wie ::selection:rgba(0,0,0,0); funktionieren auch nicht, da das Ausblenden nicht hilft - die Auswahl passiert immer noch und stört die Benutzeroberfläche. Außerdem vermute ich, dass diese Flaggen immer noch da wären.

Alle Gedanken wären großartig. Vielen Dank!

+0

Hmmm. Die Fiddle schien zu funktionieren, als ich es gerade auf meinem Handy getestet habe, aber ich bin mir nicht 100% sicher, dass es für mich in der Produktion funktionieren würde - ich muss noch in der Lage sein, Ereignisse auszulösen (insbesondere 'touchstart',' touchmove', und 'touchend') auf die Elemente. Obwohl wir davon ausgehen, dass wir nur auf "selectstart" setzen, könnten wir gut sein. Ich werde es heute Abend testen und zurück zu dir :) –

Antwort

14

Referenz:

jsFiddle Demo with Plugin

Die oben jsFiddle Demo habe ich verwendet ein Plugin Sie zu ermöglichen, von beliebigen Textblock verhindern in Android ausgewählt werden oder iOS Geräte (zusammen mit Desktop-Browsern auch).

Es ist einfach zu bedienen und hier ist die Beispiel-Markup, sobald das jQuery-Plugin installiert ist.

Beispiel HTML:

<p class="notSelectable">This text is not selectable</p> 

<p> This text is selectable</p> 

Beispiel jQuery:

$(document).ready(function(){ 

    $('.notSelectable').disableSelection(); 

}); 

Code Plugin:

$.fn.extend({ 
    disableSelection: function() { 
     this.each(function() { 
      this.onselectstart = function() { 
       return false; 
      }; 
      this.unselectable = "on"; 
      $(this).css('-moz-user-select', 'none'); 
      $(this).css('-webkit-user-select', 'none'); 
     }); 
     return this; 
    } 
}); 

Per Dein Kommentar:I still need to be able to trigger events (notably, touchstart, touchmove, and touchend) on the elements.

würde ich einfach würde einen Wrapper verwenden, die nicht betroffen von diesem Plugin ist, aber es ist Text-Inhalte mit diesem Plugin geschützt sind.

Damit die Interaktion mit einem Link in einem Textblock, Sie span tags für alle, aber die Verbindung nutzen können und die Klassennamen .notSelected für derjenigediejenigedasjenige span tags nur hinzufügen, so dass die Auswahl und Zusammenwirken des Link Anker zu erhalten.

Statusaktualisierung: Diese aktualisierte jsFiddle bestätigt Ihnen, dass möglicherweise andere Funktionen nicht funktionieren, wenn die Textauswahl deaktiviert ist. In dieser aktualisierten jsFiddle-Datei wird jQuery Click Event-Listener angezeigt, der eine Browserwarnung auslöst, wenn auf den fettgedruckten Text geklickt wird, selbst wenn dieser fett gedruckte Text nicht durch Text auswählbar ist.

+0

Dies funktioniert nicht für meine Android 2.3.3 ,,, ging einfach zu Ihrem jsFiddle und versuchte es aus. Ausgewählt den ganzen Text. Irgendwelche Ideen? – Oneezy

+0

Danke für das Feedback. Nachdem die JsFiddle-Webseite geladen hat, drücken Sie Bevor Sie den Test ausführen, können Sie zwar den gesamten Text auswählen, aber wenn Sie eine Kopie davon kopieren und in das nächste Dokument einfügen, wird der blockierte Textabschnitt nicht eingefügt.Wenn das immer noch ein Problem ist, werde ich versuchen, auf a zuzugreifen Android-Gerät mit dieser Versionsnummer. Gedanken? – arttronics

+0

+1 Fantastisch, danke @arttronics! Welche Variation könnte verhindern, dass das Kontextmenü bei "langer Berührung" angezeigt wird? –

27
-webkit-touch-callout:none; 
-webkit-user-select:none; 
-khtml-user-select:none; 
-moz-user-select:none; 
-ms-user-select:none; 
user-select:none; 
-webkit-tap-highlight-color:rgba(0,0,0,0); 

Dies wird es für jeden laufenden Browser deaktivieren.

+0

Nicht gemein, aber hast du die Frage überhaupt gelesen? Ich habe genau das über mein gesamtes CSS verputzt (von einzelnen IDs/Klassen bis hin zu "body" und "*"), und ich habe ausdrücklich gesagt, dass das Hervorheben der Hervorhebung eine schlechte Idee ist. –

+2

Ja, ich habe deine gelesen Post. Hast du den Code wirklich probiert? Es hat -webkit-touch-callout hinzugefügt und der richtige Weg, um das Highlight-Overlay mit -webkit-tap-highlight-color zu verhindern. Ich benutze dies in meinen Webapps und es funktioniert gut - kein Inhaltsmenü, keine Hervorhebung und keine Auswahl. – CoreyRS

+1

Ich nehme an, ich habe ursprünglich nicht erwähnt, aber ich hatte 'webkit-touch-callout: none;' da drin auch die ganze Zeit. Das einzige, was 'webkit-tap-highlight-color' tun würde, wäre, die Hervorhebung transparent zu machen, nicht zu deaktivieren. Ich habe mich anfangs nicht mit dem Code beschäftigt, weil es nichts war, was ich vorher nicht gesehen hatte, aber um dich zu beruhigen, habe ich es versucht und es hat nicht funktioniert. Auf welchen Betriebssystemen/Geräten haben Sie getestet, dass es funktioniert hat? Funktioniert nicht auf Android 2.3 oder 3.0 ... –

1

-webkit-user-select: keine; wurde bis Android 4.1 nicht unterstützt (sorry).

+2

Also gibt es keine Möglichkeit, loszuwerden/zu verhindern ?! :( –