我在表单中有一组复选框。我循环遍历集合以检查和/或禁用复选框。检查工作正常;但是,我在检查复选框是否已禁用时遇到问题。即使启用了复选框,它也始终返回false。我一遍又一遍地看着代码,我看不到任何可能导致这种情况发生的事情。
部分HTML文件
var collection = document.getElementById('DepartmentClassModal').getElementsByTagName('input');
if (typeof (e) !== 'undefined') {
if (e) {
switch (e) {
case 'Education':
for (var i = 0; i < collection.length ; i++) {
if ((collection[i].id == 'Accounting') || (collection[i].id == 'Finance')) {
collection[i].disabled = true
} else {
collection[i].disabled = false
}
}
break;
}
}
}
//这是我禁用复选框的方式
<input checked="checked" id="Accounting" name="Accounting" type="checkbox" disabled>
//呈现HTML
var isAccountingDisabled = $('#Accounting').is(':disabled');
//检查字段是否已禁用
var myApp = angular.module('myApp', ['ui.router','facebook'])
.config(function($stateProvider, $urlRouterProvider){
... state provider config ...
})
.config(function(FacebookProvider){
... facebook provider config ...
});
//上面的代码总是返回false。为什么会这样?
我添加了checkbox属性的屏幕截图,显示该复选框已自动选中并禁用。即使复选框呈现为已禁用,该属性也不会将其显示为已禁用。
答案 0 :(得分:1)
您不能拥有相同id
的多个元素。在循环结构中,您还可以将循环的索引添加到id,以便它是唯一的。 (Accounting1, Accounting2...
)
将您的代码更改为此类
var checkBoxesCollection = $("#yourparentelement").find("input:checkbox[name='Accounting']");
$.each(checkBoxesCollection, function(){
if (this.disabled) {
};
});
答案 1 :(得分:1)
使用===
代替==
for (var i = 0; i < collection.length ; i++) {
if ((collection[i].id === 'Accounting') || (collection[i].id === 'Finance')) {
collection[i].disabled = true
} else {
collection[i].disabled = false
}
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
答案 2 :(得分:0)
我无法使用$('#Accounting')读取该属性.is(':checked');但是,我能够使用下面的语法阅读它们。
var collection = document.getElementById('DepartmentClassModal').getElementsByTagName('input');
$.each(collection, function (index, item) {
ListDepartments[item.name + "Disabled"] = item.disabled;
})