在onkeydown事件中调用范围函数

时间:2016-09-30 08:49:18

标签: javascript jquery html angularjs

我有以下html:

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

从数据库中提取值(true / false)并传递给ng-model。根据它,选中/取消选中复选框。 ng-blur内的函数触发数据库中的更新并起作用:

$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
                    });
            }
        };  

问题是我必须使用其他不支持点击事件的设备的复选框。从这些设备我应该使用相当于enter(键码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函数中调用范围函数。如果这是真的,是否有解决方法?

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法获取Angular之外的范围对象:

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-keydownhttps://docs.angularjs.org/api/ng/directive/ngKeydown

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

答案 1 :(得分:0)

从$ scope.update_show_value中删除() 尝试以下代码:

string sa;
cout << "You find another deep red apple. Eat or drop?\n";
getline(cin, sa);
bool wordFound = false;
do
{       
    if (sa.find("Eat") != std::string::npos ||
        sa.find("Drop") != std::string::npos ||
        sa.find("eat") != std::string::npos ||
        sa.find("drop") != std::string::npos)
    {
        wordFound = true;
    }

    if (wordFound == false)
    {
        cout << "That's not a valid answer. Please choose from the options you were given." << endl;
        cin >> sa;
    }
} while (!wordFound);