Ale*_*Man 4 javascript maxlength ckeditor angularjs angularjs-directive
我已经使用ckeditor插件在angularjs中创建了一个应用程序,我已经为ckeditor创建了一个指令,该应用程序工作正常,但问题是我需要将最大字符长度设置为50,所以我放了maxlength="50",但它不起作用,
任何人都可以告诉我一些解决方案
HTML
<div data-ng-app="app" data-ng-controller="myCtrl">
<h3>CKEditor 4.2:</h3>
<div ng-repeat="editor in ckEditors">
<textarea data-ng-model="editor.value" maxlength="50" data-ck-editor></textarea>
<br />
</div>
<button ng-click="addEditor()">New Editor</button>
</div>
Run Code Online (Sandbox Code Playgroud)
脚本
var app = angular.module('app', []);
app.directive('ckEditor', [function () {
return {
require: '?ngModel',
link: function ($scope, elm, attr, ngModel) {
var ck = CKEDITOR.replace(elm[0]);
ck.on('pasteState', function () {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
});
});
ngModel.$render = function (value) {
ck.setData(ngModel.$modelValue);
};
}
};
}])
function myCtrl($scope){
$scope.ckEditors = [{value: ''}];
}
Run Code Online (Sandbox Code Playgroud)
您需要将添加id到您的textarea,就像这样:
<textarea data-ng-model="editor.value" maxlength="50" id="mytext" data-ck-editor></textarea>
Run Code Online (Sandbox Code Playgroud)
您需要处理以下关键事件CKEDITOR:
window.onload = function() {
CKEDITOR.instances.mytext.on( 'key', function() {
var str = CKEDITOR.instances.mytext.getData();
if (str.length > 50) {
CKEDITOR.instances.mytext.setData(str.substring(0, 50));
}
} );
};
Run Code Online (Sandbox Code Playgroud)
但是,请注意,内容中包含html标记,您可能希望保留它们,
我遇到了同样的问题。我制作了这个与 CKEditor 一起使用的函数,基本上模仿了 maxlength 函数。
window.onload = function() {
CKEDITOR.instances.mytext.on('key',function(event){
var deleteKey = 46;
var backspaceKey = 8;
var keyCode = event.data.keyCode;
if (keyCode === deleteKey || keyCode === backspaceKey)
return true;
else
{
var textLimit = 50;
var str = CKEDITOR.instances.mytext.getData();
if (str.length >= textLimit)
return false;
}
});
};
Run Code Online (Sandbox Code Playgroud)
此函数将检查以确保输入的字符数不超过允许的字符数。
如果确实如此,它将返回 false,这根本不允许在该字段中进行任何更多输入。
如果用户按退格键或删除键,它将返回 true,这仍然允许用户在达到内容限制时更改其内容。