|
|
|
| Подскажите плз как сделать, чтобы при выделении "Выделить все книги", выделялись только чекбоксы с Книга 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 | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 16:13)
| | эээ, простите, а почему у вас несколько одинаковых id ?
это все равно что в стране было бы несколько президентов, например. | |
|
|
|
|
|
|
|
для: Волки
(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>
|
| |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 16:38)
| | И не изменит, у вас разные группы (по смыслу) чекбоксов имеют одни и теже имена. А нужно работать по ним. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 16:43)
| | да это понятно...
сейчас мы просто берём все элементы формы, проходимся по ним и там, где тип равен чекбоксу, чекаем его.
Я и спрашиваю про то, как добавить в этот код такой javascript, который бы разграничивал по именем иил айдишникам... | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 16:47)
| | Вы сперва имена "разграничьте", и в циклах кнопок оперируйте с нужними им именами. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 16:54)
| | хм..... вроде ж 'items[1].book' , 'items[1].deer' и 'items[1].pen' это разные имена... | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 16:58)
| | Чем отличается обработчик один от другого? Они все пробегают по ВСЕМ элементам формы | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 17:12)
| | sim5, эти имена формируются на jsp и там сложно будет что-либо изменить. Проще в javascript'е.
Буду благодарен если покажешь как можно сделать то же самое, но только используя мои имена. | |
|
|
|
|
|
|
|
для: 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. Кстати, вы знаете, что вы получите на сервере в случае именования чекбоксов как у вас? | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 17:34)
| | имена формируются через nested:iterate + nested:checkbox. То есть используя Struts.
Индексы проставляются автоматически, не руками. | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 18:01)
| | Ну тогда придется извращаться. Но главное не это - вы посмотрите, что вы будете получать на сервере, как вы там извращаться намереваетесь? | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 18:12)
| | На серваке всё гут. Это уже давно работает. Сча просто появилась необходимость чекать все чекбоксы. | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 18:16)
| | Вы уверени что ГУТ? При выборе всех чекбоксов во всех трех группах, на сервере вы получите вот такое:
Array
(
[items] => Array
(
[1] => yes
[2] => yes
[3] => yes
)
)
|
Сомневаюсь чтобы вы из этого поняли, что выбрал клиент. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 18:21)
| | да уверен.
sim5,спасибо за ваше беспокойство, но сорри.. мне нужна помощь в другом, а не в том, что я получу на серваке :)
я поэтому и обратился с этим вопросм на этот форум ибо не получилось у меня реализовать желаемое, то есть когда имена типа items[1].book, ну то есть с индексами... | |
|
|
|
|
|
|
|
для: 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>
|
И что у вас в итоге? | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 18:31)
| | sim5, юзаю не ПХП, а Java + куча всякой дряни. Повторяю ещё раз - на серваке всё хорошо! :)
Вопрос в силе. | |
|
|
|
|
|
|
|
для: 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. Ну в общем, думаю, вы это знаете, измените, если что. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 19:13)
| | sim5, спасибо огромное!!
Работает тока с книгами. Почему-то с ручками и оленями не пашет. ХМ! Странно.. вроде должно... | |
|
|
|
|
|
|
|
для: 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>
|
но это блин ен совсем то....индексы должны повторяцца, как в первом случае. | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 19:43)
| | Естественно, так как достигая нужного нам элемента, итерация цикла не равна индексу элемента (для повторяющихся индексов) | |
|
|
|
|
|
|
|
для: HelloMoto
(08.07.2009 в 19:25)
| | Тьфу ... с этими индексами, забыл про них.... перепишите строку в цикле так:
if (f[i].name.substr(9) == e) f[i].checked = c; | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 19:43)
| | Всё супер!!! Спасибо, sim5, за помощь и что не пожалел своего времени!
Удачи! | |
|
|
|