为什么我的指令被调用两次?

问题描述:

我有一个叫做myEnter的指令,它被附加到html中的输入框中。 下面的代码:为什么我的指令被调用两次?

app.directive('myEnter', function() { 
    return function (scope, element, attrs) { 
     element.bind("keydown", function (event) { 
      if(event.which === 13) { 
       $(".window").animate({ scrollTop: $("#scr").height() }, 1000); 
       scope.$apply(function(){ 
        scope.$eval(attrs.myEnter); 
       }); 
       event.preventDefault(); 
      } 
      if(event.which === 38) { 
        console.log("up key pressed!"); 
        $(".window").animate({ scrollTop: $("#scr").height() }, 1000); 
        scope.$apply(function(){ 
         var arr = scope.history; 
         console.log(scope.history); 
         console.log(arr); 
        }); 
        event.preventDefault();     
      } 
     }); 
    }; 
}); 

发生了什么事,它是检测输入按键。另外,正如你所看到的,我也让它检测到输入框上的“UP”按键。

这两件事情都很好。但是,无论何时按下UP键,控制台日志都会“按下向上键”!两次。它应该只运行一次,每运行一次UP键都会运行两次。

谁能告诉我我在这里做错了什么?

+0

我相信在加载HTML页面时,指令将被自动加载。正在尝试处理指令的附加触发器? – CrazyMac

+0

@CrazyMac我在这里构建了一个终端应用程序,集成了许多功能,而且我只是好奇于实现历史事物 - 通过按UP键,用户将能够浏览所有先前的命令他之前已经开火.. http://tinypic.com/r/2zzs0id/9 – r0u9hn3ck

你也许应该尝试添加

event.stopImmediatePropagation() ; 

event.preventDefault(); 
+0

它的工作!谢谢! – r0u9hn3ck

+0

我不知道关于stopImmediatePropagation(),非常感谢。 另外,你能告诉我那里发生了什么? – r0u9hn3ck

+0

event.stopImmediatePropagation();会阻止任何处理程序在执行 – DMCISSOKHO