【问题标题】:How to determine if an onChange event was called by an onPaste如何确定 onChange 事件是否被 onPaste 调用
【发布时间】:2010-11-04 17:17:11
【问题描述】:

我有一个与 onChange 事件关联的 Javascript 函数。我了解某些浏览器在文档或元素级别支持onPaste。有没有办法确定onChange 事件是否由“粘贴”引起-我尝试添加一个全局变量,该变量在onPaste 被触发时设置,然后在onChange 例程结束时重置它,但不能保证onPaste 函数在onChange 之前被调用。

【问题讨论】:

  • change 事件仅在文本字段模糊时触发。如果发生多次更改,就不可能知道是什么触发了它。

标签: javascript dom-events onchange onpaste


【解决方案1】:

这对我来说很好用:

<input type="text" onchange="ValueChanged(event, this);" onpaste="this.setAttribute('pasted', '1');"/>


<script type="text/javascript">
function ValueChanged(evt, sender) {
    var blnCameFromPaste = ((sender.getAttribute("pasted") || "") == "1");
    if (blnCameFromPaste)
        alert("changed by paste");
    else
        alert("changed without paste");
    sender.setAttribute("pasted", "0")
}
</script>

【讨论】:

    【解决方案2】:

    您可以使用 onKeyPress/onKeyUp/onKeyDown/onPaste 代替 onChange。

    【讨论】:

    • 您也可以使用input 事件。除了 IE,所有浏览器都支持input,可以使用propertychange 事件非常有效地模拟它。除了捕获按下的键之外,input/propertychange 事件还可以通过键事件完成您需要的所有操作。
    【解决方案3】:

    我认为您无法普遍做到这一点。请参阅测试此功能的current state

    检测粘贴的一种方法是在字段获得焦点后计算“按键”之间的时间。

    【讨论】:

      【解决方案4】:

      每次看到 onchange 事件时,将字段值的当前长度与之前的长度进行比较,并将当前时间与之前的时间进行比较。如果输入字符的速度比人们想象的要快,那么它们一定是被粘贴了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 2015-02-27
        • 2011-08-31
        • 2017-10-14
        相关资源
        最近更新 更多