4

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

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

4

4 回答 4

9

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事件,但即使脚本更改了输入框的值,它也会触发,因此您必须小心处理它。不幸的是,我不熟悉突变事件,所以我不想写一个我没有信心的例子来搞砸这个答案。

于 2010-03-15T09:21:24.327 回答
1

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

于 2010-03-15T09:20:09.167 回答
0

我知道对于 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.

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

希望这可以帮助。

可能与 SO 相关的问题 IE onPaste 事件使用 javascript 而不是 HTML

于 2010-03-15T09:31:29.207 回答
0

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

于 2010-03-15T09:20:38.417 回答