[英]Checkbox doesn't show as checked in UI when checked property set to true in javascript
我在ng-repeat
生成的表中有一些复选框。
复选框的定义如下:
<input type="checkbox" id="chkView{{::myObj.TeamId}}"
ng-disabled="disableView(myObj)"
ng-click="setViewSelection(myObj.TeamId, this.checked)">
复选框没有ng-model
属性,这是有意的。 我想直接通过javascript控制每个复选框的checked
状态。
由于某些原因,该复选框不响应在JavaScript中被更新的checked
属性。 因此,如果我在javascript中有此声明:
document.getElementById('chkView27').checked = true;`
它会以编程方式工作,我可以
console.log(document.getElementById('chkView27').checked);
它将true
打印到控制台。 但是浏览器中的UI不能反映这一点。 在浏览器中,该复选框保持未选中状态。 我已经验证了事实之后,没有其他因素影响复选框的checked
属性。 用户界面只是不更新。 为什么是这样?
编辑:根据prasad的建议,我尝试将语句包装在$scope.$apply
如下所示:
$scope.$apply(function() {
document.getElementById('chkView27').checked = 'checked';
});
但是,这只会导致angular抛出“动作已进行中”错误。
https://docs.angularjs.org/error/ $ rootScope / inprog?p0 = $ digest
同样将checked属性设置为字符串“ checked”:
document.getElementById('chkView27').checked = 'checked';
用javascript完成的DOM操作不会直接影响DOM,因为它对角度来说是未知的。 如果直接在控制器中执行此操作,则它将起作用。 但是,如果您使用普通的javascript进行操作,则需要使用$ apply来使angular知道您已在DOM中进行了更改,然后angular将为您更新该内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.