<!DOCTYPE html>
<html>
<head>
<title>Clipboard Paste Text</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
</head>
<body>
<input type="text" placeholder="paste in here" />
<script type="text/javascript">
/* <![CDATA[ */
$(document, 'input[type="text"]').on('paste', function(event) {
var oEvent = event.originalEvent;
oEvent.preventDefault();
var clipText = '';
if(window.clipboardData){
clipText = window.clipboardData.getData('Text');
}else if(typeof oEvent == 'object' && oEvent.clipboardData){
clipText = oEvent.clipboardData.getData('text/plain');
}
// console.log('Pasted ' + clipText.length + ' characters.');
alert('Pasted ' + clipText.length + ' characters.');
});
/* ]]> */
</script>
</body>
</html>
^このデモコードがあります。とをバインドしpaste event
ます。INPUT[TEXT]
DOCUMENT
- Google Chrome (およびOpera 15以降) では、キャレット
Ctrl+V
のない(入力とテキストエリアの外側)がキャプチャされます。 - IE およびFirefox では、貼り
Ctrl+V
付け可能なオブジェクト(入力およびテキスト領域)の外側はキャプチャされません。
(ただし、ドキュメントの貼り付けイベント キャプチャpaste event
をすべてinputs
およびにバインドしますtextareas
。)
これは適切な動作ですか?私のJSは正しいですか?
3 つのブラウザーすべてで入力テキストボックスなしで Ctrl+V をキャプチャしたいと思います。現在テキスト入力を使用していますが、それを完全に削除して、入力ボックス レベルではなくドキュメント レベルでイベントをキャプチャしたいと考えています。それはできますか?
PS:テキストエリアに貼り付けるとブラウザを占有する大量のテキストを貼り付ける必要があります。hidden field
で をキャプチャして に保存してpaste event
いinputbox
ます。paste events
私の現在のソリューションは適切に機能しますが、何か不足しているのか、それとも FF であり、IE が入力/テキストエリア レベルでのみトリガーされるのか、まだ疑問に思っています。
PPS : 既にspellcheck=false
andautocomplete=off
トリックを使用して、より多くのテキストを貼り付けられるようにしました... しかし、まだ少しハングします。編集可能にする必要がないので、これはより良い解決策です。
PPS : 私の JS スキルはかなり錆びており (JS サバイバル モードに似ています)、この更新プログラムを頻繁に使用するので、ブラウザーの下位互換性について心配する必要はありません。
jsfiddle を作成しました: http://jsfiddle.net/ninty9notout/A42UN/