0
AngularJS (UI-Ace 사용)로 ACE 편집기를 사용해 보겠습니다. 나는 질문이있다. (예를 들어) 나는 미리 정의 된 문자를 제외한 모든 문자를 입력 할 수 없음 사용자에게사용자에게 알파벳 입력/삭제 제한
- 를 제한 할 수 있습니다
- 는 미리 정의 된 문자 또는 공간을 제외한 모든 문자를 삭제하지
UI 에이스 다음과 같이 각도에 ACE 편집기의 OnChange 이벤트를 노출 :
우리는 단지 지정된 문자 목록/A 일치하지 않는 입력 된 문자를 확인 PHP에서$scope.aceChanged = function(e) {
//
};
rray/expression/ascii하지만 어떻게 문자를 변경/입력/삭제할 수 있습니까?
안내하십시오.
편집 : 나는 사용자의 ANS에 따라 노력하고 있어요 :하지만 정의되지 않은 편집기 정의되지 않은 변수 나 선 같은 오류를 얻고있다
$scope.aceLoaded = function(_editor) {
// Options
//_editor.setReadOnly(true);
//editor.setOption("showPrintMargin", false)
_editor.setOption("showPrintMargin", false);
//_editor.setShowInvisibles(true);
var _session = _editor.getSession();
//_session.setUseSoftTabs(false);
//editor.on("change", onchange)
_editor.commands.on("afterExec", afterExec);
};
var revertScheduled = false;
$scope.aceChanged = function(e) {
if($scope.startt ==0){ $scope.startt = new Date().getTime()};
if (!revertScheduled && _editor.curOp) {
var text = e.data.lines
? e.data.lines.join("\n")
: e.data.text;
var shouldRevert = false;
var isInsertion = e.data.action[0] == "i";
if (isInsertion && !/^[;]+$/.test(text)) {
shouldRevert = true;
} else if (!isInsertion && !/^[; ]+$/.test(text)) {
shouldRevert = true;
}
if (shouldRevert) {
editor.session.mergeUndoDeltas = false
editor.session.markUndoGroup()
revertScheduled = true
console.log(e.data.text, editor.curOp)
}
}
//
$http({
url: global.apiurl+"splitrec",//"http://medline.dev/api/splitrec",
method: "POST",
data: {'record': $scope.record.name}
}).success(function (data, status, headers, config) {
// assign $scope.persons here as promise is resolved here
//$log.log(data);
$scope.res = data;
$scope.prova();
}).error(function (data, status, headers, config) {
$scope.status = status;
$log.log(status);
});
};
var onchange = function(e) {
}
var afterExec = function() {
if (revertScheduled) {
editor.undo();
revertScheduled = false
}
}
전자 내 로그 출력 :
[Object, y]
0: Object
data: Object
action: "insertText"
range: i
text: "r"
__proto__: Object
__proto__: Object
1: y
$blockScrolling: 0
$enableMultiselect: true
$highlightPending: false
$historyTracker: function() { [native code] }
$isFocused: false
$mouseHandler: l
$multiselectOnSessionChange: function() { [native code] }
$onAddRange: function() { [native code] }
$onChangeAnnotation: function() { [native code] }
$onChangeBackMarker: function() { [native code] }
$onChangeBreakpoint: function() { [native code] }
$onChangeFold: function() { [native code] }
$onChangeFrontMarker: function() { [native code] }
$onChangeMode: function() { [native code] }
$onChangeTabSize: function() { [native code] }
$onChangeWrapLimit: function() { [native code] }
$onChangeWrapMode: function() { [native code] }
$onCursorChange: function() { [native code] }
$onDocumentChange: function() { [native code] }
$onMultiSelect: function() { [native code] }
$onRemoveRange: function() { [native code] }
$onScrollLeftChange: function() { [native code] }
$onScrollTopChange: function() { [native code] }
$onSelectionChange: function() { [native code] }
$onSingleSelect: function() { [native code] }
$onTokenizerUpdate: function() { [native code] }
$opResetTimer: function (e){n==null&&(n=setTimeout(r,e||t))}
$search: o
_$emitInputEvent: function (e){n==null&&(n=setTimeout(r,e||t))}
_defaultHandlers: Object
_eventRegistry: Object
commands: o
container: div.ng-valid.ace_editor.ace-chrome.ng-dirty
curOp: null
env: Object
keyBinding: s
lastFileJumpPos: null
mergeNextCommand: true
multiSelect: u
prevOp: Object
previousCommand: null
renderer: g
selection: u
selections: Array[5]
sequenceStartTime: 1399493671829
session: p
textInput: f
(curOP가 null) 당신이 진짜 에이스 인스턴스에 대한 액세스를 가져올 수 있는지 여부
사전 정의 된 문자 (예 :;) 이외의 문자를 입력하지 말고 var shouldRevert = e.data.lines 을 설명하십시오. e.data.lines.length> 3 : /([dr])/.test(e.data.text) –
죄송 합니다만, 나는 에이스 API에 익숙하지 않은 것으로 가정하고 정규식을 직접 처리 할 수 있습니다. 필자는 질문에 설명 된 것과 정확히 일치하도록 예제를 업데이트했습니다. 삽입/제거 된 텍스트가 허용되는 문자 목록과 일치하는지 테스트하고 그렇지 않은 경우 변경 사항을 되돌립니다. –
내 코드를 참조하십시오, 내 질문에 그것을 추가했습니다. 문제가있는 것 같습니다. 편집기를 가져올 수 없습니다 .CurOp –