1

ユーザーが textarea#q に何かを入力すると、do_domething()関数が呼び出されます。ユーザーがテキストを入力する代わりに貼り付ける場合、do_something() 関数は避ける必要があります。何か案は?これは私の現在のコードです:

$('#q').keyup(function(e){
    do_something();
}).bind('paste',function(event) {
    //user pasted text, there is not need to do_something();
    //tried both of these approaches, none worked out.
    event.stopPropagation();
    event.stopImmediatePropagation();
});
4

3 に答える 3

1

ユーザーが右クリックしてコンテキストメニューを使用してテキストエリアに貼り付けると、問題ありません。そのため、ユーザーが「Ctrl+P」を使用してテキストエリアに貼り付けるという問題が残ります。キーコンボが押されたときに、キーコードをキャプチャして機能をスキップしてみることができます。これを試して:

On keydown:

var isCtrl = false;

$('#q').keydown(function (event) {
    if(e.keycode == 17)
        isCtrl = true;
    if(isCtrl == false)
        do_something();
});

$('#q').keyup(function (e) {
    isCtrl = false;
});

したがって、アイデアは「Ctrl」キーをキャプチャすることです。彼らがそれを押した場合、あなたは関数を起動したくありません。「Ctrl+P」を貼り付けるには、「Ctrl」キーを押す必要があるため、「isCtrl」がtrueになり、do_something()が起動しなくなります。働き。これに対する唯一の例外は、「p」と入力するときに「Ctrl」を押したままにする必要がないウィンドウでスティッキーキーを使用することです。

もちろん、これはすべて、キーアップではなくキーダウンイベントで関数を起動しても問題がないことを前提としています。機能によっては、これが適切でない場合があります。

これがうまくいくことを願っています。

于 2012-10-06T02:24:34.133 に答える
1

keyUpイベントを防ぐことはできません!文字通り、ユーザーがキーボードから手を離すことを許可していません! :P

jQueryには、というイベントがありcut copy pasteます。これは、IE、FF、Chrome で適切に機能します。

$(document).ready(function(){
    $('#q').bind("cut copy paste", function(e) {
        e.preventDefault();
    });
    $('#q').keyup(function(e){
        do_something();
    });
});

また、keyup関数のイベントハンドラは別途使用してください。

于 2012-10-06T02:09:48.780 に答える
0

keyup の前にバインドを貼り付けると、それが実行されます。

$('#q').bind('paste',function(event) {
    //user pasted text, there is not need to do_something();
    //tried both of these approaches, none worked out.
    event.stopPropagation();
    event.stopImmediatePropagation();
});

$('#q').keyup(function(e){
    do_something();
})
于 2012-10-06T02:11:44.113 に答える