2014-10-14 15 views
7

Also ich möchte die Funktionen eines zufrieden stellbar div (Textauswahl über die Tastatur ist die wichtigste), aber ich möchte nicht zulassen, dass der Benutzer den Text bearbeiten - ich vermutete eine readonly="readonly" würde funktionieren, aber leider nicht .Ein ContentEditable-Div schreibgeschützt machen?

Wissen wir, ob es einen Weg gibt, es zu tun? Das contenteditable div kann verschachtelte Tags innerhalb haben (<p> 's, <h1>' s).

Ich möchte eine Textarea vermeiden (das ist, wofür das ist), da es mir nicht erlaubt, andere Dinge zu tun, die ich tun muss.

Gibt es eine gute Möglichkeit, dies ohne Javascript zu tun? Und wenn nicht, gibt es einen kleinen JavaScript-Ausschnitt, der das Kopieren, Hervorheben usw. erlaubt?

Danke.

Hier ist ein Beispiel: http://codepen.io/anon/pen/dxeAE

+0

zeigen Sie uns Ihren Code –

+2

Was ohne Ihre Endbenutzer Auswahl Text in einem div * stoppt * 'zufriedengestellt'? Ich kann die Tastatur für die Textauswahl in Chrome verwenden ... – CodingIntrigue

+0

http://codepen.io/anon/pen/dxeAE hier gehen Sie. Und Sie können Text nicht so wählen, wie Sie es in einem Textarea/contenteditable tun können - ich brauche diese Funktionalität ohne die Option zu bearbeiten :) Der Schlüssel hier ist die Auswahl von Text mit einer Tastatur, keine Maus - das kann natürlich unabhängig gemacht werden :) –

Antwort

5

ich eine jquery Lösung/Abhilfe gemacht. Was das ist die Standardaktion verhindern, wenn eine Taste gedrückt wird:

$(document).ready(function(){ 
 
    $("#editor").on("keypress", function(e) { 
 
     e.preventDefault(); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="editor" contenteditable=""> 
 
    <h1>Heading</h1> 
 
    <p>Test</p> 
 
</div>

+0

Interessant, auf Tastendruck berücksichtigt nicht Shift + Pfeil nach oben, Pfeil nach unten usw. (Ich hätte gedacht, es würde es blockieren)? Dies könnte die perfekte Lösung sein –

+0

Nein, ich weiß nicht warum es nicht ... Es war überraschend für mich zu ...! –

+0

Ich muss dies in anderen Browsern (außer Chrom) versuchen, bevor ich bestätige, dass dies die Antwort ist (ich muss IE7-11 testen), aber das könnte es auch sein, es sei denn, jemand anderes hat einen anderen Vorschlag genauso gut/besser :) –

1

Sie können diese versuchen, einfache JavaScript-Lösung

document.getElementById('div').onkeydown = function (e) { 
    var event = window.event ? window.event : e; 
    return !(!~[37, 38, 39, 40].indexOf(e.keyCode) && !e.ctrlKey); 
} 

Diese Auswahl mit den Pfeiltasten kann und das gleiche kopieren.

+0

Achten Sie auf Azerty/Mac-Tastaturen ... –

+1

Ja das ist, was mir Angst macht - Schlüsselcodes können manchmal nicht sein, was Sie erwarten –

+0

Hoppla ... btw, @AndreasFurster Ihre Lösung funktioniert nicht in Mozilla (neustes) für mich –

0

Sie können wahrscheinlich asp:Panel in der div hinzufügen und machen die panel.Enabled = false Controls Innenseite Panel nicht zugänglich sein.

0

auf alle Bedienelemente innerhalb eines div gesperrt oder entsperrt zu machen, versuchen Sie dies:

<div id="lockableDiv"> 
.... 
</div> 

lockDiv = function(lockIt){ 
    if(lockIt){  
     $('#lockableDiv :input').attr('readonly', true); 
    }else{ 
     $('#lockableDiv :input').removeAttr('readonly'); 
    } 
} 
+0

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone

Verwandte Themen