我有以下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函数中调用范围函数。如果这是真的,是否有解决方法?
答案 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-keydown
:https://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);