如何访问剪贴板和当前光标位置时,粘贴在IE8/9的文本区域之前,它成为当前值

How to access clipboard and current cursor position when pasting in a textarea in IE8/9 before it becomes the current value?

本文关键字:文本 IE8 区域 剪贴板 访问 何访问 光标 位置      更新时间:2023-09-26

由于IE8/9不支持HTML5的maxlength属性,我需要找到一种方法来防止将太长的文本粘贴到textarea/input中,所以我选择通过jQuery使用onpaste -attribute/eventandler,参见下面的示例代码:

$(document).ready(function() {
  $('textarea[maxlength]').on('paste', function() {
    var maxlength = $(this).attr('maxlength');
    if (this.value.length >= maxlength) {
      this.value = this.value.substr(0,maxlength);
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea maxlength="10"></textarea>

问题是,在IE8/9中,当你粘贴超过10个字符的文本时,它在文本区域内完全可见,只有在事件处理程序切断所有超过maxlength的文本,这显然是不需要的。看起来在很短的一段时间内,粘贴的文本变成了文本区的当前值——这是不应该发生的。

所以我需要拦截textarea的值更新,并在它实际成为当前值之前检查粘贴的文本的长度。

实现这一目标的最佳方法是什么?

您可以使用

访问剪贴板内容
window.clipboardData.getData('Text')

并在将其放入文本框之前根据需要进行操作。

务必返回false,否则粘贴事件将触发并替换您所做的操作。

要访问当前值,读取textarea的innerText值

读取selectionStart属性获取当前光标位置。如果没有选择,selectionStart属性将给出当前位置。如果有选择,也可以使用selectionEnd