【问题标题】:How to detect paste in text input area if user paste a whole text or string in it?如果用户在其中粘贴整个文本或字符串,如何检测文本输入区域中的粘贴?
【发布时间】:2019-01-26 11:03:10
【问题描述】:

注意:不要将此标记为重复问题,确定不是。但它与那里的某些问题有关。

有点击事件或触摸事件来检测文本字段中的粘贴。但现在有一个新技巧可以使用移动“快速键盘”安卓键盘在文本字段中粘贴内容。这使剪贴板选项可以将预定义的文本粘贴到任何输入字段中。我尝试了几乎所有在线答案,并且这个剪贴板在没有检测到浏览器中的任何事件的情况下工作。

所以帮我解决这个问题,我想在文本字段中检测到这个特定的剪贴板事件并阻止用户使用它。

<textarea name="msg" placeholder="Type message here...." class="materialize-textarea" onCopy="return false" onDrag="return false" onDrop="return false" onPaste="return false" oncontextmenu="return false" onkeydown="if ((arguments[0] || window.event).ctrlKey) return false"></textarea>

确定这会阻止桌面或移动设备中的正常粘贴。但是,它无法检测到某些剪贴板内容粘贴。

我需要一个真正的解决方案来解决这个问题。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以在textarea 上侦听input 事件,而不是检测是否发生了粘贴事件。然后通过跟踪文本框中字符串的先前长度,您可以查看输入是否更改了多个字符。

    请参阅下面的工作示例:

    window.onload = function() {
      const textarea = document.querySelector('.materialize-textarea');
      let prev_val = textarea.value;
      let prev = prev_val.length;
    
      textarea.addEventListener('input', function() {
        let new_len = this.value.length;
        let dif = new_len - prev;
        if (dif > 1) {
          alert("paste detected!");
          textarea.value = prev_val;
        } else {
          prev = new_len;
        }
        prev_val = this.value;
      });
    }
    &lt;textarea name="msg" placeholder="Type message here...." class="materialize-textarea"&gt;&lt;/textarea&gt;

    虽然,这种解决方案确实有其局限性。

    【讨论】:

    • 我也正要回答同样的问题:)
    • 给你 >> tamil2friends.com/paste 不工作 :( 我测试你给我的相同代码。
    • @NickParsons 感谢您的真正帮助 :) 就像一个魅力。
    • @JosephMiller 我必须警告你,但是,这确实有其局限性。例如,如果您在键入时尝试在键盘上使用建议的文本,它将不允许您这样做:/
    • @NickParsons 该死的,这会让人们发疯。有没有办法检测长句子?喜欢超过 4 个字的粘贴?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2021-05-14
    • 2013-02-25
    相关资源
    最近更新 更多