输入键按下后也没有触发$ watch()。location.path工作

时间:2015-10-07 15:40:30

标签: javascript angularjs

我有一个奇怪的问题,我正面对角js。让我解释一下......

我正在使用scope.watch来观察文本字段(searchloco)中的文本更改

<input class="typeahead"  ng-model="searchloco" data="{{varu}}" search-bar   type="text"> 

我也使用keydown函数来检测输入按键,我需要的是更改location.Path on Enter键按下。

但是当我键入任何键(而不是输入)时它工作正常,即它在手表中获得文本更新以及keydown功能也正常工作。当我按下Enter键时,按键事件会触发但是观察周期不起作用对于这个键,语句“Location.path(”/“)都没有工作,它正好在if语句的下方,它确认它是一个'enter'键,直到或除非我输入另一个键(az)。

 element.on( 'keydown' , function (e){
            console.log("=== key down pressed === ",e);
            if(e.which == 13){
                location.path('/search/');
                 ...
                 ...

不确定我是否可以解释这个问题以便易于理解,所以如果我需要解释更多,请告诉我。

2 个答案:

答案 0 :(得分:4)

您可能需要将回调中的代码包装在$scope.$apply()中,如下所示:

element.on( 'keydown' , function (e){
    $scope.$apply(function () {
        console.log("=== key down pressed === ",e);
        if (e.which == 13){
            location.path('/search/');
        }
    });
});

NG-KEYDOWN

然而,建议的&#34;角度方式&#34;这样做是使用ng-keydown指令,而不是使用jQuery样式的element.on()。

HTML:

<input class="typeahead" ng-keydown="keypress" ng-model="searchloco" data="{{varu}}" search-bar type="text">

JavaScript的:

$scope.keypress = function ($event){
     console.log("=== key down pressed === ", $event);
     if ($event.which == 13){
         location.path('/search/');
     }
});

NG-提交

理想情况下,您可能希望将输入字段包装在表单中,然后处理ng-submit。这应该处理以较少依赖于平台的方式命中回车键。

<form ng-submit="go">
    <input class="typeahead" ng-model="searchloco" data="{{varu}}" search-bar type="text">
</form>

JavaScript的:

$scope.go = function (){
     location.path('/search/');
});

答案 1 :(得分:0)

您是否尝试过注入$ location并执行$location.path('/search/');