Как Выделить Все Checkbox Одним Кликом?

BlackShadow

Well-known member
04.02.2011
111
3
#1
Создаю чат. Там есть функция личных сообщений. Мне нужен код на яве (ну или на PHP в крайнем случае), который бы одним кликом выделял все чекбоксы рядом с сообщениями. Я бы и так нашел этот скрипт в гугле, если бы не одно "но".

Дело в том, что сообщения хранятся в двух таблицах мускула - inbox и outbox. Вытаскивать я их научился, но чтобы не париться с переменными, я сделал небольшую хитрую вещь, при которой происходит следующее:
PHP:
for ($ii=1; $ii<=$count; $ii++){
$nn = $ii-1;
$toUser = mysql_result($tableMail,$nn,"toUser");
if ($toUser == $log){
$id = mysql_result($tableMail,$nn,"id");
$fromUser = mysql_result($tableMail,$nn,"fromUser");
$themeMess = mysql_result($tableMail,$nn,"themeMess");
$timeMess = mysql_result($tableMail,$nn,"timeMess");
$txtMess = mysql_result($tableMail,$nn,"txtMess");
$readable = mysql_result($tableMail,$nn,"readable");
if ($readable == 1){
$read = "Прочтено";
} else {
$read = "Не прочтено";
}
$sql = "UPDATE inbox SET readable='1' WHERE id='$id'";
$addData = mysql_query($sql);
$inboxStr .= "
<tr>
<td align=\"center\"><input type=\"checkbox\" name=\"mails[".$id."]\"></td>
<td>".$fromUser."</td>
<td>".$themeMess."</td>
<td>".$txtMess."</td>
<td align=\"center\" width=\"1%\">".$timeMess."</td>
<td align=\"center\" width=\"1%\">".$read."</td>
<td align=\"center\" width=\"1%\"><a href=\"mail.php?dir=write&toUser=".$fromUser."&themeMess=".$themeMess."\">Ответить</a></td>
</tr>
";
}
}
Если обратить внимание на эту строчку:
<td align=\"center\"><input type=\"checkbox\" name=\"mails[".$id."]\"></td>,
то можно заметить, что при отправке формы, мы получим в POST['mails'] массив, в котором будут наши сообщения. Таким образом, я и смогу их удалять. Но зато изменилось решение в JS-коде, который основывается вот на чем:
Код:
function sel_all(){
if(!document.form_name1.cheks) return;
if(!document.form_name1.cheks.length){
document.form_name1.cheks.checked = document.form_name1.cheks.checked ? false : true;
} else {
for(var i=0;i<document.form_name1.cheks.length;i++){
document.form_name1.cheks[i].checked = document.form_name1.cheks[i].checked ? false : true;
}
}
form_name1 - это название формы, а cheks - это значение, указываемое в input атрибута name. Но как мы видим из моего примера с массивом в атрибуте name, здесь данный скрипт работать не будет, потому что name у каждого объекта разное.

Вот тут и проблема: как мне обойти эту проблему и сделать так, чтобы сообщения выделялись?
 

acorn

PHP Developer
29.08.2004
585
3
#2
jQuery не хочешь заюзать? ищешь все чекбоксы в диве и чекаешь. вот пример для prototype (это то, что было под рукой ;) ). в jQuery что-то похожее

Код:
			$('item-table').select('tbody tr td input').each(function (elem) {
elem.checked = true;
});
 

BlackShadow

Well-known member
04.02.2011
111
3
#3
ой.... так не хочется пока jquery заниматься.. Можно как нибудь через id? Или может всё-таки через name?
 

acorn

PHP Developer
29.08.2004
585
3
#4
Грубо говоря алгоритм такой:
перебираешь все чекбоксы (лучше всего ограничить перебор таблицей или дивом) и чекаешь их. На голом JavaScript делается не так красиво, но и не сложно.. попробуй это:

Код:
<script language="JavaScript" type="text/JavaScript">
function CheckAll()
{
var i;
for(i=0; i<document.name.elements.length; i++)
{
if(document.name.check.checked==true)
{document.name.elements[i].checked=true;}
else {document.name.elements[i].checked=false;}
}
}
</script>
Добавлено: P.S. посмотрел твой код - такой же. Так в чем тогда проблема?
 

BlackShadow

Well-known member
04.02.2011
111
3
#5
Проблема в том, что атрибут name в input'е меняется и поэтому просто document.form.name_check.checked не отловить...

Кстати, вот мой ява:
Код:
function CheckAll(){
var i;
for(i=0; i<document.form["mails"].elements.length; i++){
if(document.form["mails"].check.checked==true){
document.form["mails"].elements[i].checked=true;
} else {
document.form["mails"].elements[i].checked=false;
}
}
}
</script>
А вот код на "кнопке":
Код:
<input type="checkbox" onClick="CheckAll()">
Но что-то не работает. Что подправить?

P.S.
<a href="#" onClick="java script:CheckAll()">Выделить всё</a> - тоже не помогло
 

BlackShadow

Well-known member
04.02.2011
111
3
#6
НАШЕЛ НАШЕЛ НАШЕЛ!!!

Скрипт выделения:
Код:
<script type="text/javascript">
function ckeck_uncheck_all() {
var frm = document.mails;
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
}
</script>
Кнопка выделения:
Код:
<input type="checkbox" onclick="java script:ckeck_uncheck_all()" title="Выбрать все" name="master_box">
При этом input'ы должны иметь вид:
Код:
<input type="checkbox" name="mails[]" value="1">

Спасибо большое за помощь;)