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

你无法阻止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 回答
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”为真,防止触发 do_something(); 功能。唯一的例外是在输入“p”时不必按住“Ctrl”的窗口中使用粘滞键。

当然,这一切都假设如果您在 keydown 事件而不是在 keyup 中触发函数是可以的。根据您的功能,这可能不合适。

希望这有效。

于 2012-10-06T02:24:34.133 回答
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 回答