2

これは非常にばかげた質問に思えるかもしれませんが、onPasteイベントをキャプチャして関数に渡して処理する方法がわかりません。

$("input").on({
  'paste': function getdata(e) {

   var value = getdata();
   alert("you pasted" + value);
},
   'keyup': function getdata(e) {

    var value = getdata();
    alert("you pasted" + value);
}

});


function getdata(e) {
    if(window.clipboardData && window.clipboardData.getData) {
        value = window.clipboardData.getData('Text');
    } else if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) {
        value = e.originalEvent.clipboardData.getData('text/plain');
    }

    return value; 

}
4

1 に答える 1

3

問題は、イベント ハンドラーに名前を付けたことです。

$("input").on({
  'paste': function getdata(e) {

   var value = getdata();
   alert("you pasted" + value);
   ....
});

イベント ハンドラを呼び出しましたgetdatagetdata()したがって、関数内で呼び出すと、イベント ハンドラーが再度実行されます。これは明らかに無限ループになります。

名前付き関数式を削除します。

$("input").on({
  'paste': function (e) {

   var value = getdata(e);
   alert("you pasted" + value);
   ....
});

コードに対するその他の 2 つの修正。

valueまず、 で定義しませんgetdata。関数を開始する必要がありますvar value;

次に、イベントを に渡しませんgetdata。で呼び出す必要がありますgetdata(e)

このフィドルは、コードが完全に機能していることを示しています。

于 2013-11-02T10:47:50.813 に答える