4

JSPのテキストフィールドで、ユーザーがデータを入力しているのか、単に貼り付けているのかを知りたいです。javascriptを使用してこれを識別するにはどうすればよいですか?

編集:アンディの答えによると、私はそれについてどうやって行くことができるか知っていますが、それでもそれらの人がどのように貼り付けイベントを書いたかを好奇心が強いです。

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

お役に立てれば。

HTMLではなくjavascriptを使用したSO関連の質問 IEonPasteイベントの可能性

于 2010-03-15T09:31:29.207 に答える
0

あなたは確かに知ることは決してないだろう。キー入力を傍受する場合でも、マウスを使用して貼り付けるためにコンテキストメニューを使用した可能性があります。クリップボードへのアクセス(入力とクリップボードの内容を比較するため)は、厳密なユーザーのみの操作であるため、希望どおりに機能しません。ユーザーの明示的な同意なしにプログラムでアクセスすることはできません(ブラウザに確認メッセージが表示されます)。

于 2010-03-15T09:20:38.417 に答える