Jquery 限制所见即所得编辑器(NicEdit)中的字符数

Jquery 限制所见即所得编辑器(NicEdit)中的字符数,jquery,text,nicedit,keyup,Jquery,Text,Nicedit,Keyup,我有这个jQuery代码: var char = 60; $("#counter").append("You have <strong>" + char + "</strong> char."); $("#StatusEntry").keyup(function () { if ($(this).val().length > char) { $(this).val($(this).val().substr(0,

我有这个jQuery代码:

var char = 60;
    $("#counter").append("You have <strong>" + char + "</strong> char.");
    $("#StatusEntry").keyup(function () {
        if ($(this).val().length > char) {
            $(this).val($(this).val().substr(0, char));
        }
        var rest = char - $(this).val().length;
        $("#counter").html("You have <strong>" + rest + "</strong> char.");
        if (rest <= 10) {
            $("#counter").css("color", "#ff7777");
        }
        else {
            $("#counter").css("color", "#111111");
        }
    });
var char=60;
$(“#计数器”).append(“您有”+char+“char”);
$(“#StatusEntry”).keyup(函数(){
if($(this).val().length>char){
$(this.val($(this.val().substr(0,char));
}
var rest=char-$(this).val().length;
$(“#counter”).html(“您有”+rest+“char”);

如果(rest您必须以nice edit div为目标

$(".nicEdit-main").keyup(...

如果您有多个编辑器,此解决方案将不起作用。

如果您需要使用NicEdit,则可以通过将keyup/keydown事件绑定到新创建的div来限制击键(它不会替换您的textarea-它会添加一个div并隐藏您的textarea):

这是因为新创建的div始终位于textarea之前,所以这将适用于多个编辑器

但是,正如您在评论中指出的,contentEditable div可能就足够了-如果是,请使用以下方法:

    var char = 60;
    $("#counter").append("You have <strong>" + char + "</strong> char.");
    $("#StatusEntry").keyup(function () {
        if ($(this).text().length > char) {
            $(this).text($(this).text().substr(1));
        }
        var rest = char - $(this).text().length;
        $("#counter").html("You have <strong>" + rest + "</strong> char.");
        if (rest <= 10) {
            $("#counter").css("color", "#ff7777");
        }
        else {
            $("#counter").css("color", "#111111");
        }
    });
var char=60;
$(“#计数器”).append(“您有”+char+“char”);
$(“#StatusEntry”).keyup(函数(){
if($(this).text().length>char){
$(this.text($(this.text().substr(1));
}
var rest=char-$(this).text().length;
$(“#counter”).html(“您有”+rest+“char”);
如果(休息)

placeCaretAtEnd函数从

当您将val()更改为text()时,哪一行不起作用…什么不起作用?请您包括您的HTML…我不知道statusentry是什么…如果您将每个val()更改为text())然后你开始键入,在60个字符时,它开始替换begin中的文本。这样->你的substr不正确,在这里工作->使用div对我来说很好,contentEditable=true->你建议的解决方案有效,但是用div替换textarea只会取消表单提交。(没有textarea可提交)。如果不使用div替换textarea,如何实现这一点?
    var char = 60;
    $("#counter").append("You have <strong>" + char + "</strong> char.");
    $("#StatusEntry").keyup(function () {
        if ($(this).text().length > char) {
            $(this).text($(this).text().substr(1));
        }
        var rest = char - $(this).text().length;
        $("#counter").html("You have <strong>" + rest + "</strong> char.");
        if (rest <= 10) {
            $("#counter").css("color", "#ff7777");
        }
        else {
            $("#counter").css("color", "#111111");
        }
    });
var len = 40;    
$(".nicEdit-main").keydown(function () {
    if($(".nicEdit-main").html().length>len){
        var string = $('.nicEdit-main').html();
        $('.nicEdit-main').html(string.substring(0, len));
        placeCaretAtEnd($('.nicEdit-main').get(0));
    }
});