【问题标题】:How to use jquery to prevent a editable div reach over our restricting length如何使用 jquery 来防止可编辑的 div 超出我们的限制长度
【发布时间】:2017-10-22 07:03:13
【问题描述】:

假设我有以下代码:

<div id="editing" contenteditable onclick="document.execCommand('selectAll',false,null)">Put text here...</div>

在这种情况下,我想限制我的用户,例如只能放200个字符(包括空格),我该如何限制呢?我知道我可以使用 jquery 来实现它,但是网络上的大多数示例在单击按钮时会检查它,并且当我以 this StackOverflow question 为基础重新设计我的代码时,它会在单击 div 时检查它,但记住这一点你可以'当类型超过 200 个单词时提醒用户。

那么我怎样才能不断检查用户在 contenteditable div 中输入的字词,并在达到限制时提醒他们?

【问题讨论】:

  • 通常,您将 keydown 侦听器绑定到 div 并验证输入
  • 在输入事件中使用
  • @Vj- 我已经尝试过以下code 但结果当用户键入第 21 个字母时它会导致停止,限制为 20 个字母,但如果您输入第 21 个字母自己尝试一下,你会发现当你达到限制时,它会保持在 21 个字母而不是 20 个字母,这意味着如果用户想要减去一个字母,它也会收到警报,因为退格也是一个键

标签: javascript jquery html contenteditable maxlength


【解决方案1】:

contenteditable支持输入事件,如果文本太多就停止事件,如下所示:

var el = document.getElementById('editing');
var max = 20;
el.addEventListener('input', function(e) {
  if (el.innerHTML.length > max) {
    el.innerHTML = el.innerHTML.substr(0, max); // just in case
    alert('Not allowed more than ' + max + ' characters');
  }
});
<div id="editing" contenteditable onclick="document.execCommand('selectAll',false,null)">Put text here...</div>

但是,请远离 contenteditable 事件。他们很糟糕

【讨论】:

  • 先生,我喜欢你的功能,很好,但是我要求停止而不是覆盖
【解决方案2】:

这是简单的纯 js 解决方案:如果有什么请评论我会更新我的答案.. :D

function check()
{
 // get the HTML value.
  var content = document.getElementById('editing').innerHTML;
  //Edit : replace spaces from content (ideally you have to figure out how to remove the posible html tags that user might enter)
  content = content.replace(/ /g," ");
  console.log(content);
 // validate value againts limit say 10 or any constant value.
 if(content.length > 20)
  {
    // alert user.
    alert('limit reached');
    // flush extra characters from end.
    document.getElementById('editing').innerHTML = content.slice(0,content.length-1);
    return;
  }
}


//Edit : if you want remove placeholder from annoying user you can flush it when user gets the focus on it say 

function checkPlaceholder()
{
  document.getElementById('editing').innerHTML = ""; 
}
<div id="editing" contenteditable onInput="check();" onfocus="checkPlaceholder();">Put text here...</div>

【讨论】:

  • 我建议在达到限制时阻止它删除内容,如果用户不知道限制,这会让用户重新开始输入 - 特别是看到提问者说200 个字符
  • @Booligoosh 我想,但在这种情况下,用户仍然可以继续输入字符,并且提问者必须应用一些东西来阻止提交表单,除非用户删除额外的字符和所有..
【解决方案3】:
<div id="editing" contenteditable onkeypress = "if($(this).text().length >= 200) {return false; }"onclick="alert(document.execCommand('selectAll',false,null)">Put text here...</div>

return falseonkeypress当字符数大于等于200时

【讨论】:

    【解决方案4】:
    // Detect when you add a character to the div.
    $('div#editing').on('keydown',function(e) {
        // Check if you already have 200 characters (but allow 'backspace' and 'del' keys).
        if (e.keyCode != 8 && e.keyCode != 46 && $(this).text().length >= 200) {
            alert('The field is limited to 200 characters');
            return false; // This will make the new character to be ignored.
        }
    });
    

    【讨论】:

    • 先生,您应该测试您的功能,因为我发现当用户在达到限制后想要删除文本时会非常困难
    • 请附上解释,不要只是转储代码。
    • @Munucial 你是对的。它是如此之小,以至于我认为它可以自行解释,但这取决于谁在阅读它。我已经添加了 cmets。谢谢。
    猜你喜欢
    • 2012-01-16
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多