为什么我的指令被调用两次?
我有一个叫做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键都会运行两次。
谁能告诉我我在这里做错了什么?
你也许应该尝试添加
event.stopImmediatePropagation() ;
后
event.preventDefault();
它的工作!谢谢! – r0u9hn3ck
我不知道关于stopImmediatePropagation(),非常感谢。 另外,你能告诉我那里发生了什么? – r0u9hn3ck
event.stopImmediatePropagation();会阻止任何处理程序在执行 – DMCISSOKHO
我相信在加载HTML页面时,指令将被自动加载。正在尝试处理指令的附加触发器? – CrazyMac
@CrazyMac我在这里构建了一个终端应用程序,集成了许多功能,而且我只是好奇于实现历史事物 - 通过按UP键,用户将能够浏览所有先前的命令他之前已经开火.. http://tinypic.com/r/2zzs0id/9 – r0u9hn3ck