如何在输入无线电值更改之前捕获它
How to catch input radio value before it's changed?
我使用单选按钮选择表单中的内容类型
<input type="radio" ng-model="type" value="file" />
<input type="radio" ng-model="type" value="audio" />
<input type="radio" ng-model="type" value="video" />
我想要类似于以下代码的东西
$scope.$watch('type', function(type, previousType) {
if(!confirm('Are you sure you want to change the type?'))
$scope.type = previousType;
});
显然,此代码触发了一个无限循环,因为$scope.type = previousType
行触发了观察程序。或者像这样:
var ignore = false;
$scope.$watch('type', function(type, previousType) {
if(!confirm('Are you sure you want to change the type?') && !ignore) {
ignore = true;
$scope.type = previousType;
ignore = false;
}
});
但这会触发争用条件,ignore
将在观察程序触发之前重置为 false
。
我还尝试将ng-model
值存储在临时变量中,观察此变量,并在单选按钮上设置ng-selected="type == 'file'"
(等等),但它也不起作用。
有没有一种优雅的方法可以在实际ng-model
更新之前拦截值并对其进行测试?
您可以使用
ng-click
来实现此目的:
<input ng-click="changed()" type="radio" ng-model="my.type" value="file" />
var lastVal = false;
$scope.changed = function(){
if (lastVal !== false && $scope.my.type != lastVal){
if (!confirm('are you sure?')) {
$scope.my.type = lastVal;
return;
}
}
lastVal = $scope.my.type;
}
http://jsfiddle.net/aws7uLwr/
注意:这将触发那些元素的任何观察者,这些元素可能重要,也可能无关紧要,具体取决于您的实现。
编辑:评论中引用的替代答案:
var ignore = false;
$scope.$watch('type', function(type, previousType) {
if (ignore){
ignore = false;
return;
}
if(!confirm('Are you sure you want to change the type?')) {
ignore = true;
$scope.type = previousType;
}
});
我不
熟悉确切的语法(ng 东西),但尝试在$scope.type = previousType;
之前"取消绑定"手表,并紧跟在该行之后,重新绑定.$watch
的东西......
这样,当你重置.type
时,它不会触发"观察者",你可以很容易地避免无限循环,以及冗余"标志"的需要(代码中ignore
)。
相关文章:
- 无线电输入更改的jQuery事件未启动
- 通过单击链接(兄弟姐妹?)从无线电输入中获取id
- 当输入位于标签内时,更新无线电标签文本
- 获取检查输入无线电的标签
- 角度双向绑定无线电输入
- 检查了多个无线电输入
- 可以't获取输入无线电选择值
- AngularJs输入无线电值
- 如何使用输入无线电正确验证表单
- jQuery:表中选定的输入无线电
- Javascript 隐藏/显示数据作为输入无线电
- 输入[无线电]与ng模型和ng值的对象相等性比较
- 如何在输入无线电值更改之前捕获它
- 角度输入无线电未显示控制器中所做的更改
- 输入无线电和号码的ng型号相同
- 如何在不干扰标签内输入无线电的情况下更改标签文本?
- 隐藏表单提交的输入无线电
- 在我的表单中,我检查了输入无线电和图像更改,但我填充输入文本和图像更改回来
- 输入无线电ng-model没有更新
- 输入无线电选中/未选中在Firefox 38.0.5 Windows中不起作用 - jquery