使用JQuery动态禁用CheckBox

时间:2015-11-30 22:40:13

标签: javascript jquery html5 asp.net-mvc-5

我在表单中有一组复选框。我循环遍历集合以检查和/或禁用复选框。检查工作正常;但是,我在检查复选框是否已禁用时遇到问题。即使启用了复选框,它也始终返回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属性的屏幕截图,显示该复选框已自动选中并禁用。即使复选框呈现为已禁用,该属性也不会将其显示为已禁用。

enter image description here

3 个答案:

答案 0 :(得分:1)

您不能拥有相同id的多个元素。在循环结构中,您还可以将循环的索引添加到id,以便它是唯一的。 (Accounting1, Accounting2...

将您的代码更改为此类

var checkBoxesCollection = $("#yourparentelement").find("input:checkbox[name='Accounting']");

$.each(checkBoxesCollection, function(){
    if (this.disabled) {
    };
});

http://jsfiddle.net/eanamztz/

答案 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;
        })