对于ckeditor angularjs指令,maxlength在textarea中不起作用

Ale*_*Man 4 javascript maxlength ckeditor angularjs angularjs-directive

我已经使用ckeditor插件在angularjs中创建了一个应用程序,我已经为ckeditor创建了一个指令,该应用程序工作正常,但问题是我需要将最大字符长度设置为50,所以我放了maxlength="50",但它不起作用,

任何人都可以告诉我一些解决方案

的jsfiddle

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)

Laj*_*pad 6

您需要将添加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标记,您可能希望保留它们,


Jos*_*osh 5

我遇到了同样的问题。我制作了这个与 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,这仍然允许用户在达到内容限制时更改其内容。