将最后输入的字符替换为内容可编辑 div(尝试了所有选项)

replace last character input into content editable div (tried all options)

我有一个由内容可编辑定义的消息框 div。用户可以在输入后编辑他们的消息,并且我有一个字符倒计时,但是当我剩下 0 个字符时,我无法终生找到合适的方法来删除最后一个字符或禁止最终按键

当前方法只是将光标发送回消息的开头,并不删除该字符。我尝试了互联网上几乎所有的建议,从拼接到正则表达式再到子字符串。我发现其中 none 个可以工作。

我在下面向您展示的代码是我自己的代码并且存在同样的问题,在 0 处光标简单地返回到消息的开头,然后再次允许更多字符而不限制允许的字符数。 ..

任何人都可以帮助我并提出实现这个简单目标的方法。我会很饱的。

这是我的代码。

$(function () {

    $(ebm).keydown(checklimitsBuyer);
    });

    function checklimitsBuyer(){

        var username = $(ebm).html();
        var nameReg = /^.{0,100}$/;


        var messlength = username.length;
        var amount=100;

            var leftlength=amount-messlength;
            var ebmname=document.getElementById('Bname'+varmessageid+'');


                if (messlength < amount) {
                $(ebmname).text('Chars Left'+leftlength);
                                }




                    if(!nameReg.test(username)) {
                    $(ebm).css('border', '1px dashed red');
                    //alert('Only 300 Characters Allowed');
                        var newStr = username.replace(/.$/,".")
                        $(ebm).text(newStr);
                    }  

                                if(nameReg.test(username)) {
                                $(ebm).css('border', '1px dashed #07f310');


                                } 
                            }

如果你想限制用户可以输入的字符数,你可以试试这样:

$(window).ready(()=>{
  // our max number of characters
  let max = 10;
  // set the text of the div that allows the user to 
  // keep track of how many characters he can still input
  $('#char-count').text(`remaining characters: ${max}`);
  $('#message').on('keypress input paste', function(e){
    // the number of characters in our content editable div
    let charCount = $(this).text().length;
    if(charCount >= max){
      // prevent the user from typing
      e.preventDefault();
    }
    $('#char-count').text(`remaining characters: ${max - charCount}`);
  });
});
#message {
  border: 1px dashed green;
  height: 100px;
}

#char-count { :
  margin-top: 10px;
}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>

<div id="message" contenteditable="true"></div>
<div id="char-count"></div>

此外,这里有一个 working example :)


编辑

  • 添加了对在达到限制时阻止复制和粘贴的支持。

谢谢v.much

var ebm=document.getElementById('editBuyer'+varmessageid+'');



     $(ebm).on('keypress', function(e){

    var username = $(ebm).html();
    var nameReg = /^.{0,300}$/;

    if(!nameReg.test(username)) {
    $(ebm).css('border', '1px dashed red');
    e.preventDefault();

alert('Only 300 Characters Allowed');
                                }  

    if(nameReg.test(username)) {
    $(ebm).css('border', '1px dashed #07f310');
    } 
});