Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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
Javascript 避免在.focus中使用多个事件侦听器_Javascript_Jquery - Fatal编程技术网

Javascript 避免在.focus中使用多个事件侦听器

Javascript 避免在.focus中使用多个事件侦听器,javascript,jquery,Javascript,Jquery,我目前有一个文本框,我在焦点上调用键盘笔划: $myTextBox.on('focus', function(e){ $(document).keydown(function(e){ if(e.which==13) e.preventDefault() }); $(document).keyup(function(e){ if(e.which ==13) alert("hey"); }); });

我目前有一个文本框,我在焦点上调用键盘笔划:

$myTextBox.on('focus', function(e){
    $(document).keydown(function(e){ 
       if(e.which==13)
         e.preventDefault() 
    });
    $(document).keyup(function(e){
       if(e.which ==13)
         alert("hey");
    });
});
如果我多次单击此按钮,按一次“enter”键将导致许多警报,我如何避免此情况,使其仅被调用一次

var alreadyPressed = false;
    $("textarea").keypress(function (e) {
        if (e.which == 13) {
            e.preventDefault();
            alreadyPressed = true
        }
    });
    $("textarea").keyup(function (e) {
        if (e.which == 13 && !alreadyPressed) {
            alert("hey");
            alreadyPressed = false;
        }
    });


我知道你想做什么(或不想?)。您可以将事件附加到表单并排除textarea,而不是在每次集中输入时将其添加到文档中

$('form').on('keydown', function( e ) {
  // Prevent submit when pressing enter but exclude textareas
  if ( e.which == 13 && e.target.nodeName != 'TEXTAREA' ) {
    e.preventDefault();
  }
}

我知道你想做什么(或不想?)。您可以将事件附加到表单并排除textarea,而不是在每次集中输入时将其添加到文档中

$('form').on('keydown', function( e ) {
  // Prevent submit when pressing enter but exclude textareas
  if ( e.which == 13 && e.target.nodeName != 'TEXTAREA' ) {
    e.preventDefault();
  }
}

每次字段获得焦点时,都会添加事件侦听器

只需在documentready函数中添加keydown、keydup侦听器

$(function() {
    $("#myTextBox").keydown(function(e){ 
       if(e.which==13)
         e.preventDefault() 
    });
    $("#myTextBox").keyup(function(e){
       if(e.which ==13)
         alert("hey");
    });
});​

每次字段获得焦点时,您都要添加事件侦听器

只需在documentready函数中添加keydown、keydup侦听器

$(function() {
    $("#myTextBox").keydown(function(e){ 
       if(e.which==13)
         e.preventDefault() 
    });
    $("#myTextBox").keyup(function(e){
       if(e.which ==13)
         alert("hey");
    });
});​

正如其他人所说,您不必一直在
焦点上添加事件。同样,您应该只将事件附加到文本框本身,因为这实际上是您在焦点上添加事件时尝试执行的操作

$myTextBox.on({
  'keydown': keyDown,
  'keyup': keyUp
});​
为了使应用程序不进入enter-alert-ok循环,您必须在调用
alert()
之前关闭keyup侦听器,然后在单击ok后将其重新打开


正如其他人所说,您不必一直在
焦点上添加事件。同样,您应该只将事件附加到文本框本身,因为这实际上是您在焦点上添加事件时尝试执行的操作

$myTextBox.on({
  'keydown': keyDown,
  'keyup': keyUp
});​
为了使应用程序不进入enter-alert-ok循环,您必须在调用
alert()
之前关闭keyup侦听器,然后在单击ok后将其重新打开


他甚至没有提到textarea,只提到textbox。他甚至没有提到textarea,只提到textbox。你将keyup/keydown侦听器添加到整个文档中?为什么会有否决票?我讨厌人们只是对答案投否决票,而不提供理由。将keyup/keydown事件添加到整个文档中是一项开销,而不是他试图做的事情所需要的。@Calvin.Allen-有什么区别-_-每次textbox获得焦点时,您都会将事件侦听器添加到文档中。令人不快的不仅如此,将侦听器添加到文档中意味着它将针对文档而不是文本框启动。您将向整个文档中添加键向上/键向下侦听器?为什么会有向下投票?我讨厌人们只是对答案投否决票,而不提供理由。将keyup/keydown事件添加到整个文档中是一项开销,而不是他试图做的事情所需要的。@Calvin.Allen-有什么区别-_-每次textbox获得焦点时,您都会将事件侦听器添加到文档中。令人不快的不仅如此,将侦听器添加到文档中意味着它将针对文档而不仅仅是文本框启动。