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

时间:2017-04-13 13:02:48

标签: javascript jquery html angularjs

我有一个名为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按键运行两次。

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

1 个答案:

答案 0 :(得分:1)

你应该尝试添加

event.stopImmediatePropagation() ;

 event.preventDefault();