Общий чекбокс в форме на JS...

simbel

Новичок
Общий чекбокс в форме на JS...

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

Вотон код, который у меня есть:

PHP:
<script language="javascript" type="text/javascript"> 
<!-- 
function check_all(input_name, c){
    a = document.getElementsByTagName("input");
    for (i=0; i<a.length; i++ ){
        if (a[i].name == chkbox[]){
            a[i].checked = c;
        }
    }
}
//--> 
</script>
<?php
echo "<form name=shops>
<input type=checkbox name=all_chkbox title=\"Выбрать все\" onclick=check_all(shops,'chkbox',this.checked)>
<input type=checkbox name=chkbox[] value=".$row['ShopID'].">магазин №".$row['ShopID']."<br> 
<input type=checkbox name=chkbox[] value=".$row['ShopID'].">магазин №".$row['ShopID']."<br> 
<input type=checkbox name=chkbox[] value=".$row['ShopID'].">магазин №".$row['ShopID']."<br> 
<input type=checkbox name=chkbox[] value=".$row['ShopID'].">магазин №".$row['ShopID']."<br> 
<input type=checkbox name=chkbox[] value=".$row['ShopID'].">магазин №".$row['ShopID']."<br>
</form>";
?>
 
Код:
function checkInputs(type, name)
{
co = document.getElementsByTagName('input');
for (input = 0; input < co.length; input++)
{
element = co.item(input);
if (element.getAttribute('type') == type && element.getAttribute('name') == name)
{
element.checked = true;
}
}
}
-~{}~ 26.07.07 16:48:

Код:
... onClick='javascript: checkInputs("checkbox", "chkbox[]");'
-~{}~ 26.07.07 16:50:

javascript одним словом, херня какая-то, пробел вставляет :).
 
asm
Читай внимательно, нужна не инверсия а выделение остальных (не выделенных) чекбоксов , думаю ты понял, что при такой постановке уже выделенные чекбоксы не должны лишиться выделения.

p.s. а еще говорят что у elementsByName проблемы с IE :)
 

simbel

Новичок
Что-то ничего работать не хочет. Я в этом ЯваСкрипте совсем не разбираюсь - вот срочно понадобилось сделать эту фишечку - не получается. Спасибо, конечно за помощь, но ничего не получается из предложенного выше.
Вот эта конструкция работает:

Код:
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
var checkflag = "false";
function check(field) {
if (checkflag == "false") {
for (i = 0; i < field.length; i++) {
field[i].checked = true;}
checkflag = "true";
}
else {
for (i = 0; i < field.length; i++) {
field[i].checked = false; }
checkflag = "false";
}
}
//  End -->
</script>


<center>
<form name=myform action="" method=post>
<table>
<tr><td>
<b>Ваш любимый язык программирования</b><br>
<input type=checkbox name=list value="1">Java<br>
<input type=checkbox name=list value="2">JavaScript<br>
<input type=checkbox name=list value="3">ASP<br>
<input type=checkbox name=list value="4">HTML<br>
<input type=checkbox name=list value="5">SQL<br>
<br>                                                    
<input type=checkbox value="Все выделить" onClick="this.value=check(this.form.list)"> 
</td></tr>
</table>
</form>
</center>
Но это по всей видимости неп то что мне надо. У меня в таблице кроме столбца с чекбоксами есть и ещё столбцы с обычными текстовыми данными. Попытался прилепить её к таблице, результат - результата нет. Может есть ещё какие-то предложения на этот счёт?
 

simbel

Новичок
Вотон код таблицы. Здесь выводится список магазинов и некоторые параметры магазинов. Каждая строка представляет информацию об одном магазине. Мне нужно сделать, так чтобы при отметке чекбокса "<input type="checkbox" name=shops value=all_shops">" отмечались все остальные и после этого я мог их сразу все удалить или обновить кликнув по одной из кнопок внизу таблицы "Операции с выбранными магазинами:". Пожалуйста, помогите...

PHP:
 <table align="center" width="100%" cellpadding=0 cellspacing=0 class="show"><form name="shops" method="post" action="deleteshop.php"><tr>
<th height="35" align="center">№</th>
<th align="center">Название</th>
<th align="center">Статус</th>
<th align="center">Регион</th>
<th align="center">WWW</th>
<th align="center"><input type="checkbox" name=shops value=all_shops"></th>
<th colspan="3" align="center" width="80">Операции с_YML-файлами</th>
<th colspan="2" align="center">&nbsp;</th></tr>

<?php
while($row=mysql_fetch_assoc($res)) {
$check="<input type=\"checkbox\" name=shop[] value=".$row['ShopID'].">";
$otkat="<img src=\"http://".HOST."/i/otkat.jpg\" width=\"22\" height=\"22\" alt=\"Произвести откат обновления YML\"/>";
$obnovl="<img src=\"http://".HOST."/i/obnovl.jpg\" width=\"20\" height=\"20\" alt=\"Обновить YML\"/>";
$resoper="<img src=\"http://".HOST."/i/uspesh.jpg\" width=\"20\" height=\"20\" alt=\"Обновление успешно завершено\"/>";
$edit="<a href=\"formedshop.php?shop=".$row['ShopID']."\"><img src=\"http://".HOST."/i/edit.jpg\" width=\"22\" height=\"22\" border=0 alt=\"Изменить информацию о магазине\"/></a>";


$del="<a href=deleteshop.php?shop=".$row['ShopID']." onclick=\"return confirm('Удалить запись?');\"><img src=http://".HOST."/i/del.jpg width=22 height=22 alt=Удалить магазин из системы />";


if ($row['Status']==0)
{
  $row['Status']="<img src=\"http://".HOST."/i/off.jpg\" width=\"12\" height=\"12\" alt=\"Отключён\"/>";
  $otkat="-";
  $obnovl="-";
  $resoper="131";
}
elseif ($row['Status']==1)
{
  $row['Status']="<img src=\"http://".HOST."/i/on.jpg\" alt=\"Активен\"/>";
}
elseif ($row['Status']==2)
{
  $row['Status']="<img src=\"http://".HOST."/i/test.jpg\" width=\"13\" height=\"13\" alt=\"Тестируется\"/>";
}
echo "<tr><td align=\"center\" bgcolor=\"#F4FAFF\" width=\"40\">".$row['ShopID']."</td>
<td>".$row['Longname']."</td>
<td align=\"center\">".$row['Status']."</td>
<td align=\"center\">".$row['City']."</td>
<td align=\"center\">".$row['Url']."</td>
<td align=\"center\" width=\"20\">$check</td>
<td align=\"center\" width=\"20\">$otkat</td>
<td align=\"center\" width=\"20\">$obnovl</td>
<td align=\"center\" width=\"20\">$resoper</td>
<td align=\"center\" width=\"20\">$edit</td>
<td align=\"center\" width=\"20\">$del</td></tr>";
}
?>

<td colspan="12" align="right" class="unnamed2">&nbsp;</td>
</tr><tr>
<td colspan="6" align="right" bgcolor="#F8F8F8" class="deco"><strong>Операции с выбранными магазинами:</strong></td>
<td width="20" align="center" bgcolor="#F8F8F8"><img src="../../i/otkat.jpg" alt="Откат YML" width="22" height="22" border="0"></td>
<td width="20" align="center" bgcolor="#F8F8F8"><img src="../../i/obnovl.jpg" alt="Обновить YML" width="20" height="20" border="0"></td>

<td width="20" align="center" bgcolor="#F8F8F8"><input onclick="return confirm('Удалить выбранные записи?');" type="image" name="delete" src="../../i/del.jpg" width="22" height="22" border="0" alt="Удалить выбранные магазины"/></td>

<td colspan="2" bgcolor="#F8F8F8">&nbsp;</td></tr></form></table>
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
simbel
Код сюда
http://www.phpclub.ru/paste/

-~{}~ 26.07.07 23:53:

.
+ пожалуйста, результат выполнения ПХП-скрипта, а не мешанину пхп и Джаваскрипта
 

simbel

Новичок
Уточните, пожалуйста. Вам нужен HTML-код таблицы, которую генеририрует ПХП-скрипт?

-~{}~ 27.07.07 01:02:

Если да то вот по этой ссылке html-код сгенерированной таблицы - http://www.phpclub.ru/paste/1815
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
событие на чекбоксе кто будет ставить? Пушкин?

-~{}~ 27.07.07 00:15:

simbel
Откойте для себя FireFox и FireBug.
Отдебажить скрипт будет намного легче.
 

simbel

Новичок
Вот исправил как советовали выше, поставил событие и вывел ЯваСкрипт так же как стоит у меня, сразу перед таблицей - http://www.phpclub.ru/paste/1817 - не работает ни в IЕ, ни в FireFox... Что не так в коде?
 

Mr_Max

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

simbel
Собственно я Вам уже ответил.
FF+FireBug+моск = решение.
 

simbel

Новичок
Что я не так написал? Из-за чего все так взъелиь? Вроде никому не нагрубил.

-~{}~ 27.07.07 02:14:

Я с яваскриптами я никогда не сталкивался и мне нужно было срочно найти решение только этой задачи и всё. Сам я разбираться не могу просто времени в обрез - и так не успеваю. Проблема по-прежнему актуальна. Если помочь с решением так никто и не сможет - чтож и на этом спасибо.
 

simbel

Новичок
Я понимаю Вас - спасибо, что хоть попытались помочь. Но вопрос всё же остаётся открытым. Буду искать ответ. Если у кого-то всё же найдётся время, я буду очень благодарен.
 

Солнышко=)

Новичок
искал искал скрипт, нашёл а там облом, отказываеться выделять check'и c подобным именем ( имя[] )
ещё не много поиска и нашёл то что надо, делюсь находкой:

<style>
.highlight{ background-color: #1E90FF}
.light{ background-color: #FFFFFF}
.dark{ background-color: #CCCCCC}
</style>
<script> // © codexomega
function checkAll(field){
nb_checked=0;
for(n=0;n<field.length;n++)
if(field[n].checked)nb_checked++;
if(nb_checked==field.length){
for(j=0;j<field.length;j++){
field[j].checked=!field[j].checked;
field[j].parentNode.parentNode.style.backgroundColor
=field[j].backgroundColor==''?'#1E90FF':'';
}
}else{
for(j=0;j<field.length;j++){
field[j].checked = true;
field[j].parentNode.parentNode.style.backgroundColor
='#1E90FF';
}document.frm_data.check_all.checked=true;
}
}
function selectRow(evnt,elmnt){
var ch=elmnt.getElementsByTagName("TD")[0].firstChild;
tg = document.all?evnt.srcElement:evnt.target;
if(tg.tagName!='INPUT')ch.checked=!ch.checked;
elmnt.style.backgroundColor=ch.checked?'#1E90FF':'';
}
</script>


<div><form name=frm_data id=frm_data>
<table width=100% border=1 cellpadding=3 cellspacing=0>
<tr bgcolor=000066>
<th width=10% ><input type=checkbox name=check_all
value=check_all
onclick=checkAll(document.frm_data.deletelist)></th>
<th width=40% style=color:#FFFFFF>Airplane Name</th>
<th width=40% style=color:#FFFFFF>Airplane Type</th>
</tr></table>
<div>
<table class=list width=100% border=1 cellpadding=3
cellspacing=0>
<tr class=light onMouseOut=this.className='light'
onMouseOver=this.className='highlight'
onclick=selectRow(event,this)>
<td width=10% align=center ><input type=checkbox
name=deletelist[1] id=deletelist></td>
<td width=40% align=center>B2-Spirit</td>
<td width=40% align=center>Bomber</td>
</tr>
<tr class=dark onMouseOut=this.className='dark'
onMouseOver=this.className='highlight'
onclick=selectRow(event,this)>
<td width=10% align=center ><input type=checkbox
name=deletelist[2] id=deletelist></td>
<td width=40% align=center>F15-Eagle</td>
<td width=40% align=center>Fighter</td>
</tr>
<tr class=light onMouseOut=this.className='light'
onMouseOver=this.className='highlight'
onclick=selectRow(event,this)>
<td width=10% align=center ><input type=checkbox
name=deletelist[3] id=deletelist></td>
<td width=40% align=center>Mig29-Fulcrum</td>
<td width=40% align=center>Fighter</td>
</tr></table>
</div></form></div>

-~{}~ 01.08.07 15:48:

а это я его обрезал под нужды

<script> // © codexomega
function checkAll(field){
nb_checked=0;
for(n=0;n<field.length;n++)
if(field[n].checked)nb_checked++;
if(nb_checked==field.length){
for(j=0;j<field.length;j++){
field[j].checked=!field[j].checked;
}
}else{
for(j=0;j<field.length;j++){
field[j].checked = true;
}document.frm_data.check_all.checked=true;
}
}
</script>

<form name=chb id=frm_data>

<input type=checkbox name=check_all value=check_all onclick=checkAll(document.chb.checked) style='cursor:hand'><br>
<input type=checkbox name=deletelist[] id=checked><br>
<input type=checkbox name=deletelist[] id=checked><br>
<input type=checkbox name=deletelist[] id=checked></form>
 
Сверху