除非我输入有效的电子邮件地址,否则 ng-change 不会因电子邮件输入而被解雇
ng-change doesn't get fired for email input unless I enter a valid email address
无效电子邮件输入的模型值始终未定义。我希望能够检查用户是否输入了任何文本(即使它还不是有效的电子邮件地址)。
请检查 plnkr 以获取有关实施的更多详细信息:http://plnkr.co/edit/qV2eqGFhPvZSZKexDVF2?p=preview
Html:
<body ng-controller="MainCtrl">
<form>
<div>
<label for="email">Email address</label>
<input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
</div>
</form>
</body>
控制器:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.user = {};
$scope.$watch('user.email', function (val){
console.log("Watch: "+$scope.user.email);
});
$scope.changed = function(){
console.log("Changed: "+$scope.user.email);
}
$scope.keyUp = function(){
console.log("KeyUp: "+$scope.user.email);
}
});
干杯。
您可以在 keyup 上获取输入元素的值
$scope.keyUp = function(){
console.log('value: ', event.target.value)
}
是的,根据设计,ng-change 首先评估表达式(电子邮件或文本),如果有效,它将调用函数
让我们以文本字段为例。
因此,如果 input[text]
中有任何内容(任何文本),它将有效并触发函数(),但对于电子邮件,它仅在 input[email]
有效时才有效,这需要一些验证完成,然后它会触发事件。
$watch 也是如此,它会评估应用到它的值 $scope.$watch("user.email")
在这种情况下 user.email 只有当 input[email]
包含有效值时才会设置。
ng-keyup
将始终调用键盘事件,因此它将在每个代码中调用 function()
。
其实是有办法的。您可以使用 $ViewValue.
在表单中添加一个 ng-form
body ng-controller="MainCtrl">
<form name="myForm" ng-form="myForm">
<div>
<label for="email">Email address</label>
<input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
</div>
</form>
</body>
然后在控制器中您应该能够获取值
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.user = {};
$scope.changed = function(){
console.log("Changed: "+$scope.myForm.email.$viewValue);
}
$scope.keyUp = function(){
console.log("KeyUp: "+$scope.myForm.email.$viewValue);
}
});
你可以阅读更多here
无效电子邮件输入的模型值始终未定义。我希望能够检查用户是否输入了任何文本(即使它还不是有效的电子邮件地址)。
请检查 plnkr 以获取有关实施的更多详细信息:http://plnkr.co/edit/qV2eqGFhPvZSZKexDVF2?p=preview
Html:
<body ng-controller="MainCtrl">
<form>
<div>
<label for="email">Email address</label>
<input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
</div>
</form>
</body>
控制器:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.user = {};
$scope.$watch('user.email', function (val){
console.log("Watch: "+$scope.user.email);
});
$scope.changed = function(){
console.log("Changed: "+$scope.user.email);
}
$scope.keyUp = function(){
console.log("KeyUp: "+$scope.user.email);
}
});
干杯。
您可以在 keyup 上获取输入元素的值
$scope.keyUp = function(){
console.log('value: ', event.target.value)
}
是的,根据设计,ng-change 首先评估表达式(电子邮件或文本),如果有效,它将调用函数
让我们以文本字段为例。
因此,如果 input[text]
中有任何内容(任何文本),它将有效并触发函数(),但对于电子邮件,它仅在 input[email]
有效时才有效,这需要一些验证完成,然后它会触发事件。
$watch 也是如此,它会评估应用到它的值 $scope.$watch("user.email")
在这种情况下 user.email 只有当 input[email]
包含有效值时才会设置。
ng-keyup
将始终调用键盘事件,因此它将在每个代码中调用 function()
。
其实是有办法的。您可以使用 $ViewValue.
在表单中添加一个 ng-form
body ng-controller="MainCtrl">
<form name="myForm" ng-form="myForm">
<div>
<label for="email">Email address</label>
<input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
</div>
</form>
</body>
然后在控制器中您应该能够获取值
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.user = {};
$scope.changed = function(){
console.log("Changed: "+$scope.myForm.email.$viewValue);
}
$scope.keyUp = function(){
console.log("KeyUp: "+$scope.myForm.email.$viewValue);
}
});