【发布时间】:2016-02-17 06:19:38
【问题描述】:
我将 AngularJS 指令用于复选框列表checklist-model,但我需要始终保持至少一个复选框处于选中状态。 我通过添加 if 更改了 checklist-model.js:
watch if(current.length > 1)
在删除支票之前:
scope.$watch(attrs.ngModel, function(newValue, oldValue) {
if (newValue === oldValue) {
return;
}
var current = getter(scope.$parent);
if (angular.isFunction(setter)) {
if (newValue === true) {
setter(scope.$parent, add(current, value, comparator));
} else {
if(current.length > 1)
{
setter(scope.$parent, remove(current, value, comparator));
}
}
}
if (checklistChange) {
checklistChange(scope);
}
});
问题是 UI 已经更改为未选中,而模型没有更改。
关于如何将复选框更改回“已选中”状态,或者更好地在它更改为已选中之前捕获它,任何人都有一个优雅的建议(最好没有 JQuery)?
JSfiddle here,尝试取消选中所有复选框并查看当所有复选框都未选中时(我试图阻止)模型保持不为空(这很好但还不够)
【问题讨论】:
-
我了解您的问题,但我认为您正在寻找错误的解决方案。如果用户不想禁用复选框,就让他这样做。否则他必须选择另一个复选框,然后他可以取消选中旧的?您描述的这种行为是一种糟糕的用户体验。如果他取消选中所有复选框并禁用提交按钮,请保持简单并使用表单验证显示警告
标签: javascript angularjs checkbox angularjs-directive checklist-model