22

私は今これを持っています:

<input type="text" placeholder="Paste text" onPaste="alert(this.value);">

これは実際には機能しますが、空白のアラートウィンドウが返されます。何の価値もありません。ヘルプ?

4

2 に答える 2

46

が変更される前にonpasteイベントが発生します。次のようなものが必要です。inputvaluesetTimeout

<input type="text" placeholder="Paste text" onPaste="var e=this; setTimeout(function(){alert(e.value);}, 4);">​

ウィンドウオブジェクトにアタッチされているタイムアウト関数のスコープ内ではアクセスできないためthis、グローバル変数内への参照を保存しています。this

HTML5仕様で有効な最小間隔/タイムアウトであるため、タイムアウトとして4ミリ秒を使用しています。編集:コメントに記載されているように、0自動的に に再計算される timeOut としてミリ秒を使用することもできます4jsPerf テスト.

フィドル

onpasteイベント パス内で関数呼び出しをthisパラメーターとして使用して、HTML が JS と混ざりすぎないようにすることもできます。:)

そして、読みやすく、複数の入力で使用できる関数を次に示します。

function pasted(element) {
    setTimeout(function(){
        alert(element.value);
    }, 0); //or 4
}​

onPaste="pasted(this)"これは、任意の入力に対して単純に呼び出すことができます。

フィドル

于 2012-06-10T22:50:21.140 に答える
10

これは、コンテンツが要素 ( link )に貼り付けられるonpasteにイベントが発生するため、それを処理する時点ではまだ存在していないためです。

最新のブラウザーは、イベント ハンドラー内でクリップボード データを取得する方法をサポートしています。クロスブラウザー ソリューションの試みについては、貼り付けイベント (クロス ブラウザー) でクリップボード データを取得する JavaScriptを参照してください。

また、後で入力値をチェックするイベント ハンドラー関数 (10 ミリ秒で十分) でタイマーを開始するだけで、いつでも問題を回避できます。

于 2012-06-10T22:56:20.690 に答える