2013-05-15 4 views
0

У меня есть CheckBoxList, динамически заполненный из БД.Javascript & ASP.NET - Управление CheckBoxList

<asp:CheckBoxList ID="chklist1" runat="server" onclick="chklist1_onclick()" /> 

Oce он был заполнен. У меня есть несколько вариантов, и один из них имеет текст «No Response».

То, что я хочу, это Java-функция, которая выполняет следующие действия:

1) Если я не проверить «нет ответа» все остальные параметры должны быть сняты.

2) Если я проверяю хотя бы один из вариантов, который не является «Нет ответа», параметр «Нет ответа» должен быть снят.

Надеюсь быть ясным. Заранее спасибо.

Моя попытка была:

function chklist1_onclick() { 
    var chklist1 = document.getElementById('<%= chklist1.ClientID %>'); 
    var chkList = chklist1.getElementsByTagName("input"); 
    for (var i = 0; i < chkList.length; i++) { 
     if (chkList[i].checked && chkList[i].value == "6") { 
      for (var i = 0; i < chkList.length; i++) { 
       if (chkList[i].checked && chkList[i].value != "6") { 
        chkList[i].checked = false; 

       } 
      } 
     } 
    } 
} 

Где 6 является значение "нет ответа" пункта. Но это, как я только разрешить случай 1)

+1

Посмотрите, как CheckBoxList отображается в HTML, какие объекты/элементы есть и попробовать. Пожалуйста, опубликуйте свою попытку кода, не просите написать полный код для вас. –

ответ

1

Предполагая, что No Response флажок имеет value="" вы можете попробовать следующий сценарий:

<script type="text/javascript"> 
    window.onload = function() { 
     var noResponseCheckBoxFilter = function(item) { 
      return item.value == ''; 
     }; 
     var otherCheckboxesFilter = function(item) { 
      return !noResponseCheckBoxFilter(item); 
     }; 

     var childInputs = document.getElementById('<%= chklist1.ClientID %>').getElementsByTagName('input'); 
     var checkboxes = Array.prototype.slice.call(childInputs, 0).filter(function (item) { 
      return item.type == 'checkbox'; 
     }); 
     for (var i = 0; i < checkboxes.length; i++) { 
      checkboxes[i].onclick = function() { 
       if (this.value == '') { 
        if (this.checked) { 
         // uncheck the other checkboxes 
         var otherCheckboxes = checkboxes.filter(otherCheckboxesFilter); 
         for (var j = 0; j < otherCheckboxes.length; j++) { 
          otherCheckboxes[j].checked = false; 
         } 
        } 
       } else { 
        // uncheck the No Response checkbox 
        checkboxes.filter(noResponseCheckBoxFilter)[0].checked = false; 
       } 
      }; 
     } 
    }; 
</script> 

Если нет флажок ответа не имеет другое значение, чем пустая строка просто адаптируются тесты в предыдущем примере.

+0

Привет Дарин. Спасибо за ваш ответ. При выполнении кода я получаю следующее исключение: «Ошибка времени выполнения Microsoft JScript: ожидаемый объект JScript» при знаках var var и т. Д. – lugeno

+0

Можете ли вы протестировать с помощью реального веб-браузера и сообщить точное сообщение об ошибке, которое вы получаете в консоли? Под реальным веб-браузером я имею в виду что-то еще, чем IE. –

+0

Я могу только проверить с IE, потому что приложение должно работать только на нем – lugeno

0

Немного модифицированная версия решения Дарина, я думаю, что это IE8 совместимый.

var checkBoxList = document.getElementById('<%= chklist1.ClientID %>'); 
var checkboxes = checkBoxList.querySelectorAll('input[type=checkbox]'); 
var nonecheckbox = checkBoxList.querySelectorAll("input[value='6']")[0]; 
var i, j; 
for (i = 0; i < checkboxes.length; ++i) { 
    checkboxes[i].onclick = function() { 
     if (this.value == '6' && this.checked) { 
      // uncheck the other checkboxes 
      for (j = 0; j < checkboxes.length; ++j) { 
       if (checkboxes[j].value != '6') { 
        checkboxes[j].checked = false; 
       } 
      } 
     } else { 
      // uncheck the No Response checkbox 
      nonecheckbox.checked = false; 
     } 
    }; 
} 
0

Я решил с помощью следующего кода:

window.onload = function() { 
    var chklist1 = document.getElementById('<%= chklist1.ClientID %>'); 
    var chkList = chklist1.getElementsByTagName("input"); 
    for (var i = 0; i < chkList.length; i++) { 
     chkList[i].onclick = function() { 

      if (this.checked) { 
       if (this.value == "6") { 
        for (var i = 0; i < chkList.length; i++) { 
         if (chkList[i].value != "6") { 
          chkList[i].checked = false; 
         } 
        } 
       } 
       else { 
        for (var i = 0; i < chkList.length; i++) { 
         if (chkList[i].value == "6") { 
          chkList[i].checked = false; 
         } 
        } 
       } 
      } 

     }; 
    } 
}; 

и удалить событие OnClick в осины тега.

Смежные вопросы