2016-07-12 14 views
1

I Nur-Lese-Zeilen in meinem Lektor auf diese Weise festgelegt:Codemirror - Überprüfen Sie, ob Cursor am Ende der Zeile ist

editor.on('beforeChange', function(cm, change) { 
    if (~readOnlyLines.indexOf(change.from.line)) { 
     change.cancel(); 
    } 
} 

Wo readOnlyLines ist ein Array-Nummern der Linien enthalten, nur lesbar zu sein.

Das Problem ist, dass, wenn ich in einer editierbaren Zeile mit einem Readonly unten bin, wenn ich "Del" die Lesezeile oben kommt und ich kann es bearbeiten.

Das selbe funktioniert nicht, wenn ich eine readonly Reihe oben habe und ich "BackSpace" drücke.

Ich glaube, ich soll eine hinzufügen, wenn, wenn zur gleichen Zeit überprüft:

  1. Del gedrückt wird (ich ein Fangereignis verwendet)
  2. Die folgende Zeile ist nur lesbar (ich tat es auf die gleiche Weise ich habe mit der, wenn in dem obigen Code)
  3. der Cursor am Ende der Zeile ist (Gibt es eine bestimmte Funktion vorhanden?)

Antwort

1

der Cursor am Ende der Zeile ist (Ist eine bestimmte Funktion existieren?)

if (cm.doc.getLine (change.from.line) .length == change.from.ch) {

wenn das readOnlyLines Array eine Reihe von contigous Linien ist man so etwas tun kann: in Ihrem Beispiel

$(function() { 
 
    var editor = CodeMirror.fromTextArea(document.getElementById('txtArea'), { 
 
    lineNumbers: true 
 
    }); 
 

 
    var readOnlyLines = [1,2,3]; 
 

 
    editor.on('beforeChange', function(cm, change) { 
 
    if (~readOnlyLines.indexOf(change.from.line)) { 
 
     change.cancel(); 
 
    } else { 
 
     // if you are deleting on the row before the next readonly one 
 
     if ((change.origin == '+delete') && ~readOnlyLines.indexOf(1+change.from.line)) { 
 
     // when you press DEL at the end of current line 
 
     if (cm.doc.getLine(change.from.line).length == change.from.ch) { 
 
      change.cancel(); 
 
     } 
 
     // if you are deleting the whole line 
 
     if (cm.doc.getSelection() == cm.doc.getLine(change.from.line)) { 
 
      change.cancel(); 
 
     } 
 
     // if the line is empty 
 
     if (cm.doc.getLine(change.from.line).trim().length == 0) { 
 
      change.cancel(); 
 
     } 
 
     } 
 
    } 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.16.0/codemirror.css" rel="stylesheet"> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.16.0/codemirror.js"></script> 
 

 

 

 
<textarea id="txtArea"> 
 
1111 
 
2222 READ ONLY 
 
3333 READ ONLY 
 
4444 READ ONLY 
 
5555 
 
6666 
 
7777 
 
</textarea>

+0

heißt, funktioniert nicht, wenn ich „Entf“ drücken vom Ende der Linie 0 löscht es " newline "und ich kann dann Zeile 1 bearbeiten. – ale93p

+0

@ ale93p Könnten Sie es jetzt versuchen? – gaetanoM

+0

Danke! Jetzt funktioniert es. – ale93p

Verwandte Themen