Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如果用户在textarea中粘贴内容,则防止keyUp事件_Jquery_Event Handling_Stoppropagation - Fatal编程技术网

Jquery 如果用户在textarea中粘贴内容,则防止keyUp事件

Jquery 如果用户在textarea中粘贴内容,则防止keyUp事件,jquery,event-handling,stoppropagation,Jquery,Event Handling,Stoppropagation,如果用户在textarea#q中键入someting,则调用do#u domething()函数。如果用户粘贴文本而不是键入文本,则应避免使用do_something()函数。有什么想法吗?这是我当前的代码: $('#q').keyup(function(e){ do_something(); }).bind('paste',function(event) { //user pasted text, there is not need to do_something();

如果用户在textarea#q中键入someting,则调用do#u 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();
});
您无法阻止
keyUp
事件!这实际上是不允许用户将手从键盘上提起P

在jQuery中,有一个名为
剪切复制粘贴的事件。这适用于IE、FF和Chrome

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

另外,单独使用
keyup
函数的事件处理程序。

在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();
})

如果用户右键单击并使用上下文菜单粘贴到文本区域,则说明您很好。这就留下了用户使用“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();功能。唯一的例外是在windows中使用粘滞键,当您键入“p”时,不必按住“Ctrl”

当然,这都是假设在keydown事件中而不是在keydup中启动函数是可以的。根据您的功能,这可能不合适


希望这能起作用。

对于现在阅读本文的人来说,
event.ctrlKey
是事件对象的一个字段,您应该更可靠地确定是否按下了控件。