2013-10-03 4 views
-1

Привета У меня есть ниже HTML-код и на Тумблер флажке я огнь это яваскрипт функции, которая, как предполагается, чтобы проверить весь скрипт checkboxes.The не работает должным образом .Йся это скрипка http://jsfiddle.net/eBFwq/Изменения дочерних элементов с помощью JavaScript

HTML

<SPAN class="Checkbox"> 

<INPUT id="ctl00_PlaceHolderMain_Chk_1" CHECKED="check" type="checkbox" name="ctl00$PlaceHolderMain$Chk_1"> 

<LABEL for="ctl00_PlaceHolderMain_Chk_1">Check 1</LABEL> 

</SPAN> 

Javascript

function toggle(source) { 
    checkboxes = document.getElementsByClassName('Checkbox'); 
    alert(checkboxes.length); 
    for (var i = 0, n = checkboxes.length; i < n; i++) { 
     checkboxes[i].childNodes[0].checked = source.checked; 
    } 

}

+0

Причины вы не ставите класс флажков, чтобы начать? – epascarello

+0

Если вы собираетесь настроить скрипку, убедитесь, что она работает. Ошибка JavaScript. 'SyntaxError: missing} после тела функции http://fiddle.jshell.net/eBFwq/show/ Строка 27', и у вас есть скрипт, выполняющий onload. – epascarello

+0

Эй, что HTML создается с помощью элемента управления ASP.Net – user505210

ответ

1

Практически. Вам нужно использовать индекс 1 дочернихNodes, а не 0.
В противном случае вам нужно удалить пробел между двумя тегами.

http://jsfiddle.net/H9mc2/

window.toggle = function toggle(source) { 

      checkboxes = document.getElementsByClassName('Checkbox'); 
      // alert(checkboxes.length); 
      for (var i = 0, n = checkboxes.length; i < n; i++) { 
       checkboxes[i].childNodes[1].checked = source.checked; 
      } 

} 

Кроме того, если у вас есть много флажков:
вместо выбора всех, я бы инвертировать выделение, как

function invertCheckboxSelection(e) 
    { 
     e = e || event; /* get IE event (not passed) */ 
     e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; 

     var strFormId = "form1"; 
     var strCheckBoxId = "cbInvertSelection"; 


     var ControlCheckbox = document.getElementById(strCheckBoxId); 
     ControlCheckbox.disabled = true; 

     var form = document.getElementById(strFormId); 

     for (var i = 0; i < form.elements.length; i++) 
     { 

      if (form.elements[i].type == 'checkbox') 
      { 
       if (form.elements[i].id != strCheckBoxId) 
        form.elements[i].checked = !form.elements[i].checked; 

      } // End if (form.elements[i].type == 'checkbox') 

     } // Next i 

     ControlCheckbox.disabled = false; 
    } // End Function invertCheckboxSelection 
1

Проблема заключается в том, что первый childnode не является флажком. Существует текстовыйNode.

console.log(checkboxes[i].childNodes[0]); 

который

<TextNode textContent="\n\n"> 

Поскольку вы сказали, что генерируется код, который Вы должны использовать getElementByTagName() вместо того, чтобы полагаться на определенном порядке ChildNodes.

checkboxes[i].getElementsByTagName("input")[0].checked = source.checked; 
+0

Я получаю эту ошибку javascript для этой строки checkboxes = document.getElementsByClassName ('Checkbox'); ..Object не поддерживает это свойство или метод. Любая идея, что это может быть – user505210

+0

Работает отлично для меня: http://jsfiddle.net/eBFwq/3/ Старые версии IE не поддерживают 'getElementsByClassName'. Это твоя проблема? – epascarello

+0

I m на IE8..и вы играете ссылку не работает – user505210

0

Почему бы не использовать JQuery? Я знаю, что вы не выбрали jquery как тег в вопросе, но подумайте об этом. Это облегчит вам поиск дочерних узлов. Я пошел путь Jquery и приготовил что-то вроде этого:

$("input").click(function(){ 
    var checkboxes = $('.Checkbox').children(); 
    console.log(checkboxes.length); 
    for (var i = 0; i < checkboxes.length; i++) { 
     checkboxes[i].checked = "checked"; 
    } 

}); 

Посмотреть рабочую скрипку здесь: http://jsfiddle.net/bbweR/2/

+0

Ваш скрипт не работает. – user505210

+0

@ user505210: для моего скрипта для работы вам нужно передать jquery.js в свой проект. Если он не работает, то это потому, что у вас нет js, иначе скрипка работает как ожидалось. –

+0

Когда я выбираю флажок «Выбрать все, что он проверяет снизу», но когда я отменяю его выбор, ничего не происходит ... он должен отменить выбор другого. – user505210

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