[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с чекбоксоми
forza
Доброе время суток,

Вот код. Задача чекбокса main -> выделять все чекбоксы или снимать выделение.

function check(chk) {
if(document.myform.main.checked == true) {
for (var i = 0; i < chk.length; i++) {
chk[i].checked = true ;
}
}

else {
for (var i = 0; i < chk.length; i++) {
chk[i].checked = false;
}
}
}


<form name="myform" method="post" id="myform">

CHECK ALL NOW!<input type="checkbox" onClick='check(t)' name="main"/><br/>

OMG<input type="checkbox" name="t" value="omg" /><br/>
WTF<input type="checkbox" name="t" value="wtf" /><br/>
BBQ<input type="checkbox" name="t" value="bbq" /><br/>

<input
type="submit" name="GO!" />

</form>


Казалось бы, все работает замечательно что еще надо? А надо следующее. Дело в том что, эти чекбоксы у меня обрабатывает PHP-скрипт. А чтоб он получил данные как массив, а не как строку надо для чекбоксов прописать -> name="t[]" . Но после этого перестает работать JS код. Как подружить PHP c JS или может быть поможете изменить функцию, чтоб она понимала name="t[]", а не только name="t".




Спустя 27 минут, 8 секунд (5.04.2011 - 11:50) T1grOK написал(а):
упрощенный вариант этой функции

function checkAll(oForm, cbName, checked){
for (var i=0; i < oForm[cbName].length; i++) oForm[cbName][i].checked = checked;
}
:)

CHECK ALL NOW!<input type="checkbox" onClick="checkAll(this.form,'t[]',this.checked)" name="main"/><br/>

Спустя 54 минуты, 36 секунд (5.04.2011 - 12:45) forza написал(а):
T1grOK, у вас она работает?
У меня выдает ошибку на 8ой строке.
Строка:

for (var i=0; i < oForm[cbName].length; i++) oForm[cbName][i].checked = checked;

Ошибка:

Uncaught TypeError: Cannot read property 'length' of undefined

а точнее, oForm[cbName] is undefined

Спустя 19 минут, 10 секунд (5.04.2011 - 13:04) ApuktaChehov написал(а):
Что бы не было проблем с id используйте DOM.
Загоните все ваши checkbox - ы в div и сделайте так:
for(i = 0; i < div.getElementsByTagName('input').length; i++)
{
div.getElementsByTagName('input')[i].checked = true;
}

Спустя 27 минут, 38 секунд (5.04.2011 - 13:32) forza написал(а):
ApuktaChehov, тоже вариант, но мне не подойдет, потому что мои чекбоксы не в одном месте все.
Порылся на буржуйских форумах и решил проблему вот так.



function check() {
with(document.myform) {

if(document.myform.main.checked == true) {
for (var i=0; i < elements.length; i++) {
if (elements[i].type == 'checkbox' && elements[i].name == 't[]')
elements[i].checked = true;
}
}


else {
for (var i=0; i < elements.length; i++) {
if (elements[i].type == 'checkbox' && elements[i].name == 't[]')
elements[i].checked = false;
}
}

}
}



<form name="myform" method="post" id="myform">

CHECK ALL NOW!<input type="checkbox" onClick="check()" name="main"/><br/>

OMG<input type="checkbox" name="t[]" value="omg" /><br/>
WTF<input type="checkbox" name="t[]" value="wtf" /><br/>
BBQ<input type="checkbox" name="t[]" value="bbq" /><br/>

<input
type="submit" name="GO!" />

</form>


Единственный минус, это почему то я немогу передать в функцию параметры... не знаю почему правда. Т.е я их передаю, но сразу вылетает ошибка типа "undefined"

Спустя 1 час, 59 минут, 2 секунды (5.04.2011 - 15:31) ИНСИ написал(а):
forza вот вариант, у меня работает нормально (при использовании jQuery):
$(function () {
$("#selall").click(function () {
if(!$("#selall").is(":checked")){
$(".checkbox").removeAttr("checked");
} else {
$(".checkbox").attr("checked","checked");
}
}
);
});

Вот главный чекбокс, который все остальные выделяет либо снимает
<input id="selall" type="checkbox" />

а вот чекбокс, который должен быть у всех:
<input class="checkbox" type="checkbox" />


_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.