【问题标题】:limit how many characters can be pasted in textarea限制可以在 textarea 中粘贴多少个字符
【发布时间】:2010-02-03 07:52:20
【问题描述】:

是否可以检测有多少字符被粘贴到 HTML 文本区域中,如果超出限制则取消粘贴?

编辑:我想做的是防止用户粘贴大量字符(约 300 万),因为它会使某些浏览器崩溃。所以我想在他们的浏览器锁定之前取消粘贴。我正在制作一个文档编辑器,用户可能会在其中尝试。但他们可以随心所欲地输入。

【问题讨论】:

  • 你不能真正阻止用户崩溃他们自己的浏览器,他们总会找到办法这样做:-)

标签: jquery html textarea copy-paste


【解决方案1】:

你可以像这样在 jQuery 上这样做:

$(document).ready(function(){
function limits(obj, limit){

    var text = $(obj).val(); 
    var length = text.length;
    if(length > limit){
       $(obj).val(text.substr(0,limit));
     } else { // alert the user of the remaining char. I do alert here, but you can do any other thing you like
      alert(limit -length+ " characters remaining!");
     }
 }


$('textarea').keyup(function(){

    limits($(this), 20);
})

  })

查看演示 here

【讨论】:

  • 在使用键盘快捷键进行复制/粘贴或用户直接在框中键入时很有用,但是当用户使用右键单击和上下文菜单粘贴长文本时,您如何做到这一点?跨度>
【解决方案2】:
$("textarea").blur(function(event) {
    var maxLength = 3000000;
    var length = this.value.length;
    if (length > maxLength) {
        //reassign substring of max length to text area value
        this.value = this.value.substring(0, maxLength);
        alert(maxLength + ' characters allowed, excess characters trimmed');
    }
});

这个 jquery 将匿名函数附加到 textareas,这将修剪文本并提醒用户,您也可以将其附加到 keypress 事件。

有关详细信息,请参阅:http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html

【讨论】:

    【解决方案3】:

    在 IE 中,您可以使用 onPaste 事件。 (MSDN documentation)

    在 Firefox、Safari、Opera 和 Chrome 中,您可以使用 onInput 事件 (Dottoro.com reference)。当通过用户界面更改元素的文本内容时触发此事件,包括粘贴。

    【讨论】:

      【解决方案4】:

      你无法通过 JS 访问剪贴板内容,所以你无法阻止它。但是,您有三个选择:

      1. 不允许用户粘贴内容(这对 UX 来说是个非常糟糕的主意)。
      2. 粘贴后,使用 onPaste 事件将粘贴的内容从 0 替换到字符的限制。
      3. 使用 javascript/flash 插件(这不适用于移动设备)。
      4. 使用小程序或 SilverLight(我不喜欢这个)

      这些只是一些建议,如果您找到其他方法,请告诉我。

      【讨论】:

        【解决方案5】:

        我会使用 jQuery 并为 textarea 添加一个事件处理程序。当处理程序触发时,进行计数并根据需要做出响应。

        【讨论】:

        • 据我所知,没有办法检测粘贴并将其与正常输入区分开来。也没有办法删除粘贴,你能做的最好的就是删除会使 textarea 超出限制的字符。
        • 跟踪文本区域上的每个操作,保持之前的文本缓存(对于每个键位),如果粘贴导致它超出限制,只需使用之前缓存的版本来重置它。在这种情况下无需区分普通输入和粘贴。
        猜你喜欢
        • 2012-07-28
        • 2012-10-16
        • 1970-01-01
        • 2019-09-30
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        相关资源
        最近更新 更多