Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выделение чекбоксов с разными именами
 
 автор: HelloMoto   (08.07.2009 в 16:13)   письмо автору
 
 

Подскажите плз как сделать, чтобы при выделении "Выделить все книги", выделялись только чекбоксы с Книга 1, Книга 2, Книга 3, при выделинии Выделить всех оленей, выделялись только Олень1, 2.. и т.д.? Имена должны быть такими, как они сейчас.

<html>  

<head>  
  <title></title>  
</head>  

<body>  
<form name='form' action='' method='post'>  
<pre>  
  Выбрать все книги<input type='checkbox' name='sel_all' onClick='var o=this.form.elements;for(var i=0;i<o.length;i++)if(o[i].type="checkbox")o[i].checked=this.checked'>  
  Книга 1 <input id='items_1' type='checkbox' value='yes' name='items[1].book'>  
  Книга 2 <input id='items_2' type='checkbox' value='yes' name='items[2].book'>  
  Книга 3 <input id='items_3' type='checkbox' value='yes' name='items[3].book'>  
  
    Выбрать все ручки<input type='checkbox' name='sel_all' onClick='var o=this.form.elements;for(var i=0;i<o.length;i++)if(o[i].type="checkbox")o[i].checked=this.checked'>  
  Ручка 1 <input id='items_1' type='checkbox' value='yes' name='items[1].pen'>  
  Ручка 2 <input id='items_2' type='checkbox' value='yes' name='items[2].pen'>  
  Ручка 3 <input id='items_3' type='checkbox' value='yes' name='items[3].pen'> 
  
    Выбрать всех оленей <input type='checkbox' name='sel_all' onClick='var o=this.form.elements;for(var i=0;i<o.length;i++)if(o[i].type="checkbox")o[i].checked=this.checked'>  
  Олень 1 <input id='items_1' type='checkbox' value='yes' name='items[1].deer'>  
  Олень 2 <input id='items_2' type='checkbox' value='yes' name='items[2].deer'>  
  Олень 3 <input id='items_3' type='checkbox' value='yes' name='items[3].deer'> 
</pre>  
</form>  
</body>  

</html> 

Вот здесь похожее, но не совсем то...

http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=38180

  Ответить  
 
 автор: Волки   (08.07.2009 в 16:26)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 16:13)
 

эээ, простите, а почему у вас несколько одинаковых id ?
это все равно что в стране было бы несколько президентов, например.

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 16:38)   письмо автору
 
   для: Волки   (08.07.2009 в 16:26)
 

это всё-равно ничего не меняет...


<html>  
<head>  
  <title></title>  
</head>  
<body>  
<form name='form' action='' method='post'>  
<pre>  
  Выбрать все книги<input type='checkbox' name='sel_all' onClick='var o=this.form.elements;for(var i=0;i<o.length;i++)if(o[i].type="checkbox")o[i].checked=this.checked'>  
  Книга 1 <input id='b1' type='checkbox' value='yes' name='items[1].book'>  
  Книга 2 <input id='b2' type='checkbox' value='yes' name='items[2].book'>  
  Книга 3 <input id='b3' type='checkbox' value='yes' name='items[3].book'>  
  
    Выбрать все ручки<input type='checkbox' name='sel_all' onClick='var o=this.form.elements;for(var i=0;i<o.length;i++)if(o[i].type="checkbox")o[i].checked=this.checked'>  
  Ручка 1 <input id='p1' type='checkbox' value='yes' name='items[1].pen'>  
  Ручка 2 <input id='p2' type='checkbox' value='yes' name='items[2].pen'>  
  Ручка 3 <input id='p3' type='checkbox' value='yes' name='items[3].pen'> 
  
    Выбрать всех оленей <input type='checkbox' name='sel_all' onClick='var o=this.form.elements;for(var i=0;i<o.length;i++)if(o[i].type="checkbox")o[i].checked=this.checked'>  
  Олень 1 <input id='d1' type='checkbox' value='yes' name='items[1].deer'>  
  Олень 2 <input id='d2' type='checkbox' value='yes' name='items[2].deer'>  
  Олень 3 <input id='d3' type='checkbox' value='yes' name='items[3].deer'> 
</pre>  
</form>  
</body>  
</html> 

  Ответить  
 
 автор: sim5   (08.07.2009 в 16:43)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 16:38)
 

И не изменит, у вас разные группы (по смыслу) чекбоксов имеют одни и теже имена. А нужно работать по ним.

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 16:47)   письмо автору
 
   для: sim5   (08.07.2009 в 16:43)
 

да это понятно...
сейчас мы просто берём все элементы формы, проходимся по ним и там, где тип равен чекбоксу, чекаем его.
Я и спрашиваю про то, как добавить в этот код такой javascript, который бы разграничивал по именем иил айдишникам...

  Ответить  
 
 автор: sim5   (08.07.2009 в 16:54)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 16:47)
 

Вы сперва имена "разграничьте", и в циклах кнопок оперируйте с нужними им именами.

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 16:58)   письмо автору
 
   для: sim5   (08.07.2009 в 16:54)
 

хм..... вроде ж 'items[1].book' , 'items[1].deer' и 'items[1].pen' это разные имена...

  Ответить  
 
 автор: GeorgeIV   (08.07.2009 в 17:12)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 16:58)
 

Чем отличается обработчик один от другого? Они все пробегают по ВСЕМ элементам формы

  Ответить  
 
 автор: sim5   (08.07.2009 в 17:12)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 16:58)
 

Я по началу читаю и за индексом уже не воспринимаю.... а зачем такая сложность в именовании?
<script>
function selectGroup(n) {
  for(i=0; i<n.length; i++) n[i].checked = true; 
}
</script>   
<form name="form" action="" method="post">   
<pre>   
  Выбрать все книги<input type="checkbox" onClick="selectGroup(this.form.elements('book[]'))">   
  Книга 1 <input id="b1" type="checkbox" value="yes" name="book[]">   
  Книга 2 <input id="b2" type="checkbox" value="yes" name="book[]">   
  Книга 3 <input id="b3" type="checkbox" value="yes" name="book[]">   
   
    Выбрать все ручки<input type="checkbox" onClick="selectGroup(this.form.elements('pen[]'))">   
  Ручка 1 <input id="p1" type="checkbox" value="yes" name="pen[]">   
  Ручка 2 <input id="p2" type="checkbox" value="yes" name="pen[]">   
  Ручка 3 <input id="p3" type="checkbox" value="yes" name="pen[]">  
   
    Выбрать всех оленей <input type="checkbox" onClick="selectGroup(this.form.elements('deer[]'))">   
  Олень 1 <input id="d1" type="checkbox" value="yes" name="deer[]">   
  Олень 2 <input id="d2" type="checkbox" value="yes" name="deer[]">   
  Олень 3 <input id="d3" type="checkbox" value="yes" name="deer[]">  
</pre>   
</form>

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 17:26)   письмо автору
 
   для: sim5   (08.07.2009 в 17:12)
 

sim5, эти имена формируются на jsp и там сложно будет что-либо изменить. Проще в javascript'е.
Буду благодарен если покажешь как можно сделать то же самое, но только используя мои имена.

  Ответить  
 
 автор: sim5   (08.07.2009 в 17:34)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 17:26)
 

И что трудно подправить формирование имен в JS на человеческие? Ну ей богу, зачем такие премудрости, чем они обусловлены? Хотя бы уберите индексы из имен, и можете использовать свои имена, то есть:
Книга 1 <input id='b1' type='checkbox' value='yes' name='items[].book'>
Книга 2 <input id='b2' type='checkbox' value='yes' name='items[].book'>
Книга 3 <input id='b3' type='checkbox' value='yes' name='items[].book'>
и т.д....

PS. Кстати, вы знаете, что вы получите на сервере в случае именования чекбоксов как у вас?

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 18:01)   письмо автору
 
   для: sim5   (08.07.2009 в 17:34)
 

имена формируются через nested:iterate + nested:checkbox. То есть используя Struts.
Индексы проставляются автоматически, не руками.

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:12)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 18:01)
 

Ну тогда придется извращаться. Но главное не это - вы посмотрите, что вы будете получать на сервере, как вы там извращаться намереваетесь?

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 18:16)   письмо автору
 
   для: sim5   (08.07.2009 в 18:12)
 

На серваке всё гут. Это уже давно работает. Сча просто появилась необходимость чекать все чекбоксы.

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:21)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 18:16)
 

Вы уверени что ГУТ? При выборе всех чекбоксов во всех трех группах, на сервере вы получите вот такое:
Array
(
    [items] => Array
        (
            [1] => yes
            [2] => yes
            [3] => yes
        )

)

Сомневаюсь чтобы вы из этого поняли, что выбрал клиент.

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 18:29)   письмо автору
 
   для: sim5   (08.07.2009 в 18:21)
 

да уверен.
sim5,спасибо за ваше беспокойство, но сорри.. мне нужна помощь в другом, а не в том, что я получу на серваке :)
я поэтому и обратился с этим вопросм на этот форум ибо не получилось у меня реализовать желаемое, то есть когда имена типа items[1].book, ну то есть с индексами...

  Ответить  
 
 автор: sim5   (08.07.2009 в 18:31)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 18:29)
 

А зря уверены. Отметьте все свои чекбоксы и отправьте форму, сделав проверку на своем локальном сервере:
<?
echo "<pre>";
print_r($_POST);
echo 
"</pre>";
?>

<form action="" method="post"><pre>    
  <pre>   
  Выбрать все книги<input type='checkbox' name='sel_all'>   
  Книга 1 <input id='b1' type='checkbox' value='yes' name='items[1].book'>   
  Книга 2 <input id='b2' type='checkbox' value='yes' name='items[2].book'>   
  Книга 3 <input id='b3' type='checkbox' value='yes' name='items[3].book'>   
   
    Выбрать все ручки<input type='checkbox' name='sel_all'>   
  Ручка 1 <input id='p1' type='checkbox' value='yes' name='items[1].pen'>   
  Ручка 2 <input id='p2' type='checkbox' value='yes' name='items[2].pen'>   
  Ручка 3 <input id='p3' type='checkbox' value='yes' name='items[3].pen'>  
   
    Выбрать всех оленей <input type='checkbox' name='sel_all'>   
  Олень 1 <input id='d1' type='checkbox' value='yes' name='items[1].deer'>   
  Олень 2 <input id='d2' type='checkbox' value='yes' name='items[2].deer'>   
  Олень 3 <input id='d3' type='checkbox' value='yes' name='items[3].deer'> 
  <input type="submit" value="Send">   
</pre></form>

И что у вас в итоге?

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 18:37)   письмо автору
 
   для: sim5   (08.07.2009 в 18:31)
 

sim5, юзаю не ПХП, а Java + куча всякой дряни. Повторяю ещё раз - на серваке всё хорошо! :)

Вопрос в силе.

  Ответить  
 
 автор: sim5   (08.07.2009 в 19:13)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 18:37)
 

Ну надо было сразу сказать, что не РНР, а то я бочку накатил.) Ну можно так:
<script>
function selectGroup(f, e, c) {
  for(i=1; i<f.length; i++)
    if (f[i].name == "items["+i+"]."+e) f[i].checked = c; 
}
</script>   
<form name="form" action="" method="post">   
<pre>   
  Выбрать все книги<input type="checkbox" onClick="selectGroup(this.form.elements, 'book', this.checked)">   
  Книга 1 <input id='b1' type='checkbox' value='yes' name='items[1].book'>    
  Книга 2 <input id='b2' type='checkbox' value='yes' name='items[2].book'>    
  Книга 3 <input id='b3' type='checkbox' value='yes' name='items[3].book'>   
   
    Выбрать все ручки<input type="checkbox" onClick="selectGroup(this.form.elements, 'pen', this.checked)">   
  Ручка 1 <input id='p1' type='checkbox' value='yes' name='items[1].pen'>    
  Ручка 2 <input id='p2' type='checkbox' value='yes' name='items[2].pen'>    
  Ручка 3 <input id='p3' type='checkbox' value='yes' name='items[3].pen'>  
   
    Выбрать всех оленей <input type="checkbox" onClick="selectGroup(this.form.elements, 'deer', this.checked)">   
  Олень 1 <input id='d1' type='checkbox' value='yes' name='items[1].deer'>    
  Олень 2 <input id='d2' type='checkbox' value='yes' name='items[2].deer'>    
  Олень 3 <input id='d3' type='checkbox' value='yes' name='items[3].deer'>  
</pre>   
</form>

Проверяются все элементы формы (передаются первым аргументом) с именем необходимым (второй аргумент). Третий аргумент я передал на всякий случай - это текущее состояние управляющего чекбокса, именно оно и присваивается группе. А вдруг вам захочется этим же чекбоксом разотметить группу. Если не надо, то выбросить третий аргумент и приписывать явно - true.
Можно и первый аргумент не передавать, а определять в функции: по индексу формы на странице, по ее имени, по id. Ну в общем, думаю, вы это знаете, измените, если что.

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 19:25)   письмо автору
 
   для: sim5   (08.07.2009 в 19:13)
 

sim5, спасибо огромное!!
Работает тока с книгами. Почему-то с ручками и оленями не пашет. ХМ! Странно.. вроде должно...

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 19:43)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 19:25)
 

так работает -

<script> 
function selectGroup(f, e, c) { 

  for(i=0; i<f.length; i++) {
    if (f[i].name == "items["+i+"]."+e)  f[i].checked = c;
  }

</script>    
<form name="form" action="" method="post">    
<pre>    
  Выбрать все книги<input type="checkbox" onClick="selectGroup(this.form.elements, 'book', this.checked)">    
  Книга 1 <input id='b1' type='checkbox' value='yes' name='items[1].book'>     
  Книга 2 <input id='b2' type='checkbox' value='yes' name='items[2].book'>     
  Книга 3 <input id='b3' type='checkbox' value='yes' name='items[3].book'>    
    
    Выбрать все ручки<input type="checkbox" onClick="selectGroup(this.form.elements, 'pen', this.checked)">    
  Ручка 1 <input id='p1' type='checkbox' value='yes' name='items[5].pen'>     
  Ручка 2 <input id='p2' type='checkbox' value='yes' name='items[6].pen'>     
  Ручка 3 <input id='p3' type='checkbox' value='yes' name='items[7].pen'>   
    
    Выбрать всех оленей <input type="checkbox" onClick="selectGroup(this.form.elements, 'deer', this.checked)">    
  Олень 1 <input id='d1' type='checkbox' value='yes' name='items[9].deer'>     
  Олень 2 <input id='d2' type='checkbox' value='yes' name='items[10].deer'>     
  Олень 3 <input id='d3' type='checkbox' value='yes' name='items[11].deer'>   
</pre>    
</form> 


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

  Ответить  
 
 автор: sim5   (08.07.2009 в 19:50)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 19:43)
 

Естественно, так как достигая нужного нам элемента, итерация цикла не равна индексу элемента (для повторяющихся индексов)

  Ответить  
 
 автор: sim5   (08.07.2009 в 19:43)   письмо автору
 
   для: HelloMoto   (08.07.2009 в 19:25)
 

Тьфу ... с этими индексами, забыл про них.... перепишите строку в цикле так:
if (f[i].name.substr(9) == e) f[i].checked = c;

  Ответить  
 
 автор: HelloMoto   (08.07.2009 в 19:48)   письмо автору
 
   для: sim5   (08.07.2009 в 19:43)
 

Всё супер!!! Спасибо, sim5, за помощь и что не пожалел своего времени!
Удачи!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования