如果用户将整个文本或字符串粘贴到文本输入区域中,该如何检测粘贴?

时间:2019-01-26 11:03:11

标签: javascript

注意:请勿将其标记为重复问题,请确保不是。但这与那里的某些问题有关。

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

因此,请帮助我解决此问题,我想在文本字段中检测到此剪贴板事件,并阻止用户使用它。

<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>

确保这可以阻止台式机或移动设备中的常规粘贴。但是,它无法检测到某些剪贴板内容粘贴。

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

1 个答案:

答案 0 :(得分:3)

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

请参见下面的工作示例:

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;
  });
}
<textarea name="msg" placeholder="Type message here...." class="materialize-textarea"></textarea>

尽管,此解决方案确实有其局限性。