2016-09-30 21 views
0

我有以下的html:呼叫范围功能的onkeydown事件中

<input type="checkbox" ng-model="user.show_value" ng-blur="update_show_value()"> 

值(真/假)是从数据库中获取并传递到NG-模型。取决于它,复选框被选中/取消选中。 NG-模糊内的功能触发更新的数据库和工作原理:

$scope.update_show_value() = function() { 
      if ($scope.user.show_value != undefined) { 
       $scope.loading = true; 
       //IF VALUE IS VALID, CALL THE UPDATEPIN FUNCTIONn 
       User.updatevalue($scope.user) 
        //IF SUCCESSFUL, GET VALUE 
        .success(function(data) { 
         $scope.loading = false; 
         $scope.formData = {}; //CLEAR FORM SO THAT USER CAN ENTER NEW DATA 
         $scope.user.show_value = {type : $scope.user[0].show_value}; //PASS VALUE IN OUR SCOPE 
        }); 
      } 
     }; 

的问题是,我将不得不使用复选框从不支持Click事件的其他设备。从这些设备我应该使用相当于输入(键码13)。所以我添加了onkeydown事件来检测何时在复选框上按下回车键。使用从W3Schools的一个例子,我看到它的工作原理(这里是例子http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_event_key_keycode3

<input type="checkbox" ng-model="user.show_value" onkeydown="keyCode(event)" ng-blur="update_show_value()"> 

现在我要调用的更新功能时的onkeydown事件检测代码13被按下。类似这样的:

<script> 
function keyCode(event) { 
    var x = event.keyCode; 
    if (x == 13) { 
     alert ("You pressed the Escape key!"); 
     update_show_value(); 
    } 
} 
</script> 

但是,调用keycode函数内的update_show_value不起作用。实际上,在keycode函数中添加update_show_value会导致其他一切不起作用(例如警报)

因此,出于某种原因,我认为范围函数不能在JavaScript函数内调用。如果这是真的,是否有解决方法?

+1

没有问题的,但可能是下一个* *的问题:'keyCode'是不可靠的跨浏览器。所以:'var x = event.keyCode || event.which;' –

+0

我建议手动隐藏元素和触发事件。你的代码超出了Angular的界限,你不会得到这些功能。替代品可能会污染全球范围,但触发事件会更好 – Rajesh

回答

1

你可以得到的角以外的范围对象使用:

angular.element(event.target).scope(); // and then call whatever functions you want to on that scope object 

您可以定义自己的指令以处理keydown

angular.directive('myKeydown', [ function() { 
    return { 
     link: function(scope, elem, attrs) { 
      element.bind('keydown', function() { 
       scope.update_show_value(); 
      }); 
     } 
    }; 
}]); 

或只是使用ng-keydown代替:https://docs.angularjs.org/api/ng/directive/ngKeydown

$scope.keyCode = function($event) { 
    . . . 
    $scope.update_show_value(); 
}; 
0

从$ scope.update_show_value
remove()方法尝试下面的代码:

<script> 
var app=angular.module("myApp", []); 
    app.controller("myCtrl", function($scope) { 
    $scope.update_show_value = function() { 
     alert(1); 
    }; 

    }); 
</script>