2017-04-13 100 views
0

我有一個叫做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

回答

1

你也許應該嘗試添加

event.stopImmediatePropagation() ; 

event.preventDefault(); 
+0

它的工作!謝謝! – r0u9hn3ck

+0

我不知道關於stopImmediatePropagation(),非常感謝。 另外,你能告訴我那裏發生了什麼? – r0u9hn3ck

+0

event.stopImmediatePropagation();會阻止任何處理程序在執行 – DMCISSOKHO

相關問題