JSPのテキストフィールドで、ユーザーがデータを入力しているのか、単に貼り付けているのかを知りたいです。javascriptを使用してこれを識別するにはどうすればよいですか?
編集:アンディの答えによると、私はそれについてどうやって行くことができるか知っていますが、それでもそれらの人がどのように貼り付けイベントを書いたかを好奇心が強いです。
JSPのテキストフィールドで、ユーザーがデータを入力しているのか、単に貼り付けているのかを知りたいです。javascriptを使用してこれを識別するにはどうすればよいですか?
編集:アンディの答えによると、私はそれについてどうやって行くことができるか知っていますが、それでもそれらの人がどのように貼り付けイベントを書いたかを好奇心が強いです。
Safari、Chrome、Firefox、Internet Explorerはすべてこのonpasteイベントをサポートしています(Operaについてはよくわかりません)。イベントにラッチすると、onpaste何かが貼り付けられるたびにキャッチできるようになります。
<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、スクリプトが入力ボックスの値を変更した場合でも発生するため、注意が必要です。残念ながら、私は突然変異イベントに精通していないので、自信がない例を書いてこの答えを台無しにしたくありません。
キーの押下をカウントし、テキストボックスの内容と一致することを確認します。ペーストには、テキストボックスのように完全な文字数が含まれません。
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イベントの可能性
あなたは確かに知ることは決してないだろう。キー入力を傍受する場合でも、マウスを使用して貼り付けるためにコンテキストメニューを使用した可能性があります。クリップボードへのアクセス(入力とクリップボードの内容を比較するため)は、厳密なユーザーのみの操作であるため、希望どおりに機能しません。ユーザーの明示的な同意なしにプログラムでアクセスすることはできません(ブラウザに確認メッセージが表示されます)。