In this plunk我有一个带有输入字段和按钮的表单。输入字段ng-blur
和表单提交调用相同的函数validate()
。问题是,当光标在输入字段上并且用户点击"提交"该功能被触发两次,因为当焦点传递给按钮时会出现模糊。在那种情况下,我需要调用一次函数。
如果您查看console.log
,您将看到该功能如何被触发两次。任何想法如何解决这个问题?
HTML
<form name="myForm" ng-submit="validate(2)">
<input type="text" ng-model="someField" ng-blur="validate(1)" />
<br/>
<button type="submit">Submit</button>
</form>
的Javascript
var app = angular.module('example', []);
app.controller('ctl', function ($scope) {
$scope.validate = function(x) {
console.log("field validated - " + x);
};
});
答案 0 :(得分:0)
很明显,但你可以随时根据事件类型进行区分,只需传递一个额外的attribute
来表示事件的类型
编辑:ng-change
代替ng-blur
(评论说明)
html
<form name="myForm" ng-submit="validate(2)">
<input type="text" ng-model="someField" ng-change="validate(1)" />
<br/>
<button type="submit">Submit</button>
</form>
js
$scope.validate = function(x) {
console.log("field validated - " + x);
};
答案 1 :(得分:0)
我想解决这个问题。我放了submitted
变量来确定是否提交form
。因此,在validate
函数中,我们首先确定submitted
是否为真。但是,重要的一点是,当我们完成API调用时,我们需要将其设为false
。像这样:
app.controller('ctl', function ($scope) {
$scope.submitted = false;
$scope.validate = function(x) {
if($scope.submitted === true) {
return;
}
$scope.submitted = true;
console.log("field validated - " + x);
// change $scope.submitted back to false in success and error callback of
// the API call
};
});
此解决方案还有另一个好处。它阻止用户提交表单两次(在提交按钮上多次单击?)
我们也可以使用formName.$submitted
但是这里有一个函数调用会有它而另一个函数不会。