我是角色的新手,我正在寻找一种调用函数的方法,目前只在焦点超出该字段后才会在每次更改后调用。这个函数的目的是检查用户是否更改了某个<td>
中的数据,并且只有在他更改了数据函数时才应该执行。问题是现在每个按键调用该函数,所以如果使用在<td>
中添加2个字符串,它将执行两次。
这是我的表:
<tbody ng-repeat="(user_id,script_id) in data">
<tr ng-repeat="(script_id, cron_format) in script_id">
<td class="userName">{{user(user_id)}}</td>
<td class="scriptName">{{script(script_id)}}</td>
<td class="cronFormat"><input type="text" ng-model="cron_format" ng-change="saveCron(user_id,script_id,cron_format)"/></td>
</tr>
</tbody>
这就是功能:
$scope.$watch('cron_format',function(x,old){
if(x!=old){
}
});
$scope.saveCron = function(userId,scriptId,cronFormat){
$.post("updateCronChange.php",
"user_id="+userId+"&script_id="+scriptId+"&cron_format="+cronFormat,
function(data){
//inside post
alert('cron format changed to:'+cronFormat);
});
}
任何有角度的方式我只能在焦点出来之后调用saveCron() field(cron_format)??
答案 0 :(得分:6)
Angular 1.3.x的另一个解决方案是使用ngModelOptions
指示仅在焦点事件上更新模型:
<input type="text"
ng-model="cron_format"
ng-change="saveCron()"
ng-model-options="{ updateOn: 'focusout', debounce: {'focusout': 0} }"/>
答案 1 :(得分:0)
看起来你在谈论ng-blur
答案 2 :(得分:0)
您可以在视图中使用ng-blur指令而不是ng-change。这样,每次输入字段失去焦点时都会调用saveCron。
答案 3 :(得分:0)
您不需要$watch
(尽管可以),而是与另一个更改的值进行比较。您可以使用ng-blur
来触发更改检查。
$scope.old = $scope.cron_format = "";
$scope.saveCron(user_id, script_id, cron_format) {
if ($scope.old == $scope.cron_format) {
return; //value was unchanged
}
$scope.old = $scope.cron_format;
$http.post();
});