代码之家  ›  专栏  ›  技术社区  ›  Ravi Gupta

我怎么知道用户是在打字还是在粘贴?

  •  3
  • Ravi Gupta  · 技术社区  · 15 年前

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

    编辑: 根据安迪的回答,我知道我该怎么做,但还是很好奇那些家伙是怎么写的。 粘贴 事件。

    4 回复  |  直到 15 年前
        1
  •  9
  •   Andy E    15 年前

    Safari、Chrome、Firefox和Internet Explorer都支持 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 */
    }
    

    据我所读,歌剧不支持 粘贴 事件。你可以使用 DOMAtrrModified 事件,但即使脚本更改了输入框的值,也会触发此事件,因此必须小心处理。不幸的是,我不熟悉突变事件,所以我不想写一个我不太自信的例子来搞砸这个答案。

        2
  •  1
  •   Paul Whelan    15 年前

    对按键进行计数,并确保它与文本框中的内容相匹配。粘贴将没有文本框中的完整字符数。

        3
  •  0
  •   Sandor Drieënhuizen    15 年前

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

        4
  •  0
  •   Community CDub    8 年前

    我知道,对于文本区域,您可以使用 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.
    

    至于打字,有 onKeyDown , onKeyUp , onKeyPress 事件。

    希望这有帮助。

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