【问题标题】:How can I know user is typing or pasting?我怎么知道用户正在输入或粘贴?
【发布时间】:2010-03-15 09:17:19
【问题描述】:

在我的 JSP 的文本字段中,我想知道用户是在输入数据还是只是在粘贴。 我如何使用 javascript 识别它?

编辑:根据安迪的回答,我知道我该怎么做,但仍然好奇那些人是如何编写 onpaste 事件的。

【问题讨论】:

  • @Ravi:不确定我是否理解您的问题的更新-您的意思是浏览器供应商是如何编写事件的?还是别的什么?
  • 是的,如果我想编写自己的 onpaste 事件,我应该怎么做?

标签: javascript jsp paste


【解决方案1】:

Safari、Chrome、Firefox 和 Internet Explorer 都支持onpaste 事件(不确定 Opera)。锁定onpaste 事件,您将能够捕捉到粘贴的内容。


写这个很简单。使用 html 将事件处理程序添加到您的输入中:
<input type="text" id="myinput" onpaste="handlePaste(event);">

或 JavaScript-DOM:

var myInput = document.getElementById("myInput");

if ("onpaste" in myInput) // onpaste event is supported
{
    myInput.onpaste = function (e)
    {
        var event = e || window.event;
        alert("User pasted");
    }
}
// Check for mutation event support instead
else if(document.implementation.hasFeature('MutationEvents','2.0'))
{
    /* You could handle the DOMAttrModified event here, checking 
       new value length vs old value length but it wouldn't be 100% reliable */
}

据我所知,Opera 不支持onpaste 事件。您可以使用DOMAtrrModified 事件,但即使脚本更改了输入框的值,它也会触发,因此您必须小心处理它。不幸的是,我不熟悉突变事件,所以我不想写一个我没有信心的例子来搞砸这个答案。

【讨论】:

  • 从来不知道这就是我喜欢的原因。
  • @Tim Down:是的,但我认为不值得一提,因为很少有人使用 Firefox 2.0。
  • 我认为这些事情总是值得一提的。我不想提及某些东西是否适用于 IE 4,甚至可能是 IE 5,但 Firefox 2.0 并没有那么旧。
【解决方案2】:

计算按键次数并确保它与文本框中的内容匹配,粘贴不会像文本框中那样包含完整的字符数。

【讨论】:

  • 这很聪明,但不防水。如果我在输入后粘贴,可能是在使用退格键重新开始之后?
  • 检查文本框中的字符总数。粘贴将比您检测到的关键事件增加更多。删除键有一个代码查找它并减少计数:)
  • 您可以从上下文菜单中粘贴而不使用任何键,因此您的处理事件无法捕捉到这一点。
  • 是的,您可以,但字符仍会出现在文本框中,因此您知道文本框中的字符数多于输入的字符数,因此您可以检测到发生了粘贴。
  • 我看到上面有一个 onpaste 事件可以解决它。但我想你是对的。我可以继续将一个字符粘贴到另一个字符上,但我会挑剔:)
【解决方案3】:

你永远不会确定。即使在截取键输入时,用户也可能已经使用上下文菜单使用鼠标进行粘贴。访问剪贴板(将输入与剪贴板内容进行比较)不会按照您想要的方式工作,因为它是严格的仅限用户操作。未经用户明确同意,您无法以编程方式访问(浏览器将显示确认消息)。

【讨论】:

    【解决方案4】:

    我知道对于 textarea,您可以使用 onPaste 事件捕获粘贴事件。

    HTML:

    <textarea id="textEditor" />
    

    在 JS 中:

    var editor = document.getElementById("textEditor");
    
    if (isIE /* determine this yourself */) {
       editor.onPaste = function() {
    
       }
    } else {
       //Not IE
       editor.onpaste = function() {
    
       }
    }
    
    //The capitalisation of the onpaste (non-IE) and onPaste (IE) makes a difference.
    

    至于打字,有onKeyDownonKeyUponKeyPress 事件。

    希望这会有所帮助。

    可能与 SO 相关的问题 IE onPaste event using javascript not HTML

    【讨论】:

      猜你喜欢
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      相关资源
      最近更新 更多