как сделать общий checkbox "Выбрать все" на JS

code367

Новичок
как сделать общий checkbox "Выбрать все" на JS

Тема закрыта, так как решение найдено!

Есть у меня вот такой код, но он не работает. Помогите исправить ошибки.
Нужно одним нажатием ставить/снимать везде галочки.

PHP:
<script language="javascript" type="text/javascript">
<!--
function CheckAll(oForm, cbName, is_checked)
{
	for (var i in oForm.cbName) oForm.cbName[i].checked = is_checked;
}
//-->
</script>
дальше форма

PHP:
<input type="checkbox" name="all_chkbox" title="выбрать все" onclick="CheckAll(this.form,'chkbox',this.checked)">выбрать все<br>

<input type='checkbox' name='chkbox[1]'>первый вариант<br>
<input type='checkbox' name='chkbox[5]'>пятый вариант<br>
<input type='checkbox' name='chkbox[78]'>не вариант<br>
<input type='checkbox' name='chkbox[3434]'>да вариант<br>
<input type='checkbox' name='chkbox[2]'>второй вариант<br>
Известно что количество вариантов неизвестно, и какие варианты тоже.
 

filipchuk

Новичок
у тебя цикл идет последовательный (индексы 0,1,2...), а в форме индексы идут вразброс (1,5,78)
используй for ... in
 

code367

Новичок
Статус checked лучше передавать в функцию, чтобы одной кнопкой отменять/помечать чекбоксы.

Такой вопрос по поводу ссылки:

<input type="checkbox" name="list" value="1">Java<br>
<input type="checkbox" name="list" value="2">Javascript<br>

Разве list будет после этого массивом для php?

-~{}~ 19.06.07 10:45:

Автор оригинала: filipchuk
у тебя цикл идет последовательный (индексы 0,1,2...), а в форме индексы идут вразброс (1,5,78)
используй for ... in
И точно. :rolleyes:

Таким образом? :

PHP:
function CheckAll(oForm, cbName, checked)
{
    for (var i in oForm.cbName) oForm.cbName[i].checked = checked;
}
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
code367

Статус checked лучше передавать в функцию, чтобы одной кнопкой отменять/помечать чекбоксы.
Не заметил, что она у Вас как переменная функции.
Правда я б не называл пеменные именами свойств(checked) Дж.Скрипта, так чтоб не путаться.

Поиск рулит.
http://satya61229.blogspot.com/2007/03/javascript-checkselect-all.html
 

code367

Новичок
Поиск всегда рулит. Вы эти ссылки уже давали. Там сделана та же реализация только больше лишнего кода.
И отличие в том что мне нужно проиндексировать массив значений, а в этом примере он не проиндексирован.

там
PHP:
<input name="checkList[]" type="checkbox" value="PHP"  > PHP<br />
<input name="checkList[]" type="checkbox" value="CSS" > CSS  <br />
<input name="checkList[]" type="checkbox" value="Javascript" > Javascript      <br />
<input name="checkList[]" type="checkbox" value="Ajax" > Ajax                 <br />
у меня
PHP:
<input type='checkbox' name='chkbox[1]'>первый вариант<br>
<input type='checkbox' name='chkbox[5]'>пятый вариант<br>
<input type='checkbox' name='chkbox[78]'>не вариант<br>
<input type='checkbox' name='chkbox[3434]'>да вариант<br>
<input type='checkbox' name='chkbox[2]'>второй вариант<br>
Поэтому мне кажется эта фишка не сработает для моего кода:
PHP:
comfList = document.forms[frm].elements['checkList[]'];
У меня в коде есть какая то неточность, помогите ее найти. Мне не нужен весь код заново написан, да еще из других источников.
 

oracloid

совсем кукус
PHP:
<input type='checkbox' name='chkbox[]' value='1'>первый вариант<br>
<input type='checkbox' name='chkbox[]' value='5'>пятый вариант<br>
<input type='checkbox' name='chkbox[]' value='78'>не вариант<br>
<input type='checkbox' name='chkbox[]' value='3434'>да вариант<br>
<input type='checkbox' name='chkbox[]' value='2'>второй вариант<br>
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
code367

Например как вариант
Код:
function check_all(input_name, c){
    a = document.getElementsByTagName("input");
    for (i=0; i<a.length; i++ ){
        if (a[i].name == input_name){
            a[i].checked = c;
        }
    }
}
if (a.name == input_name) - если у вас есть ещё группы полей, которым снятие чекбоксов не нужно.
 

code367

Новичок
Автор оригинала: Mr_Max
code367

Например как вариант
Код:
function check_all(input_name, c){
    a = document.getElementsByTagName("input");
    for (i=0; i<a.length; i++ ){
        if (a[i].name == input_name){
            a[i].checked = c;
        }
    }
}
if (a.name == input_name) - если у вас есть ещё группы полей, которым снятие чекбоксов не нужно.

Это не идеальный вариант. А если будут потом поля другие... Не... ;)

-~{}~ 19.06.07 14:55:

Исходя из помощи отзывчивых форумчат, родился такой вот рабочий вариант. :)

PHP:
<script language="javascript" type="text/javascript">
<!--
function CheckAll(oForm, oName, is_checked)
{
		var chkList = document.forms[oForm].elements[oName];
		for (var i in chkList) chkList[i].checked = is_checked;
}
//-->
</script>

<input type="checkbox" name="all_chks" title="выбрать все" onclick="CheckAll(\'f_manage\',\'chkbox[]\',this.checked)">

<input type='checkbox' name='chkbox[]' value='1'>первый вариант<br>
<input type='checkbox' name='chkbox[]' value='56'>пятый вариант<br>
<input type='checkbox' name='chkbox[]' value='567'>не вариант<br>
<input type='checkbox' name='chkbox[]' value='2'>да вариант<br>
<input type='checkbox' name='chkbox[]' value='78'>второй вариант<br>
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Это не идеальный вариант. А если будут потом поля другие... Не...
он клик - check_all('check_foxes_for_check_uncheck', this.checked);

code367
Ваш код в ИЭ точно работает?

-~{}~ 19.06.07 15:16:

Версия ИЕ?
код полный?
 

DeadLy

Новичок
Mr_Max
Надо добавить как минимум <form name="f_manage">**********</form>

-~{}~ 19.06.07 16:48:

ТОлько у меня в опере работает, а в ИЕ нет
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
DeadLy
Понятное дело
я просто тестил на ИЕ5.5 и ИЕ6
ни там ни там не работает.
в ФФ и Опере все отлично.

-~{}~ 19.06.07 15:50:

ТОлько у меня в опере работает, а в ИЕ нет
ну дык и я про тоже.
 

code367

Новичок
Форму нужно добавить конечно, я не весь код привел.

в IE не работает... что делать..?:(

Хотелось чтобы и IE поддерживал, ох не люблю я этот браузер. :rolleyes:
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
code367

Форму нужно добавить конечно, я не весь код привел.
ну ет понятное дело.

в IE не работает... что делать..?
Своё решение я Вам дал.

-~{}~ 19.06.07 16:53:

Хотелось чтобы и IE поддерживал, ох не люблю я этот браузер.
Приведённый код работает в ФФ в Опере ИЕ 5.5, 6.
Код:
function check_all(input_name, c){
    a = document.getElementsByTagName("input");
    for (i=0; i<a.length; i++ ){
        if (a[i].name == input_name){
            a[i].checked = c;
        }
    }
}
 
Сверху