2016-09-30 20 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>