我试图拦截复选框更改,因此我可以在中间放置一个确认阶段,我遇到了奇怪的行为。
当我单击复选框preventDefault
时,阻止UI更改复选框,但绑定模型将更改一次,然后不再可更改。
关于如何解决此问题的任何想法?我接近这个错误吗?
$scope.change = function(selected, $event){
$event.preventDefault();
};
https://jsfiddle.net/tcVhN/197/
编辑:回答JB的问题如下:
我正在尝试拦截复选框更改,因此我可以在IE中间放置一个确认步骤"您确定要更改吗? 这个文本框?"
刚更新为1.47(并更新了jsfiddle链接)。
我使用ng-click是因为ng-change没有通过事件 通过这意味着我无法通过取消ui更改 $ event.preventDefault。
- 醇>
见上文。
答案 0 :(得分:1)
我修改了你的小提琴以使它工作: https://jsfiddle.net/masa671/8qrct4y2/
请注意HTML中的更改:ng-model="x.checked"
到ng-checked="x.checked"
。
JavaScript的:
$scope.change = function(selected, $event){
$event.preventDefault();
$timeout(function () {
if (window.confirm('Are you sure?')) {
selected.checked = !selected.checked;
}
});
};
对我来说,关键问题是找出如何阻止复选框状态更改,直到用户确认更改为止。我不知道最佳/正确的解决方案,但我解决了这个问题,以便事件处理程序只是阻止默认行为,并且在$timeout
的帮助下在事件处理程序之外处理实际更改。
至少小提琴似乎以一种理智的方式工作......: - )