|
|
|
| Здравствуйте!
Помогите, пожалуйста, с решением такой задачи:
У меня есть список чекбоксов, генерируемый динамически, например:
<input name="arr[]" type="checkbox" value="1">
<input name="arr[]" type="checkbox" value="2">
<input name="arr[]" type="checkbox" value="3">
<input name="arr[]" type="checkbox" value="4">
<input name="arr[]" type="checkbox" value="5">
<input name="arr[]" type="checkbox" value="6">
|
Задача - как только пользователь поставил галочки на четырех из этих чекбоксов, сделать все чекбоксы в списке не активными. Тоесть выбрать можно максимум четыре варианта из предложенных.
Понятно, что нужна какая-то функция, которая будет вызываться при щелчке на чекбоксе, которая будет проверять сколько чекбоксов сейчас выбрано и соответственно активировать или деактивировать невыбранные чекбоксы
<script type="text/javascript">
function update_checkbox_list() {
//а вот сюда что написать?
}
</script>
<input name="arr[]" type="checkbox" value="1" onClick="update_checkbox_list()">
<input name="arr[]" type="checkbox" value="2" onClick="update_checkbox_list()">
<input name="arr[]" type="checkbox" value="3" onClick="update_checkbox_list()">
<input name="arr[]" type="checkbox" value="4" onClick="update_checkbox_list()">
<input name="arr[]" type="checkbox" value="5" onClick="update_checkbox_list()">
<input name="arr[]" type="checkbox" value="6" onClick="update_checkbox_list()">
|
| |
|
|
|
|
|
|
|
для: Temnovit
(19.01.2009 в 13:47)
| | Вы лишаете посетителя права выбора, зачем его злить? Посетителя надо лелеять)))
Может выводить предупреждение? Что мол можно выделять только четыре чекбокса.
И пока он их не снимет, не отправлять форму. | |
|
|
|
|
|
|
|
для: mikha
(19.01.2009 в 14:16)
| | Где логика? | |
|
|
|
|
|
|
|
для: Valick
(19.01.2009 в 14:26)
| | Перечитал внимательнее ТС.
Если после снятия галки с какого нибуть чекбокса остальные опять становятся активными, то нормально.
Я подумал что выбрал четыре, всё, остальные неактивны и выбора больше нет. Т.е потом ничего не исправишь.
В принципе нормально. | |
|
|
|
|
|
|
|
для: mikha
(19.01.2009 в 14:16)
| | >Вы лишаете посетителя права выбора, зачем его злить? Посетителя надо лелеять)))
Ну ради этого собственно и делается :) Поставить проверку на РНР проблем никаких, но хочется чтобы человек узнал о том, что его действия не верны до перегрузки страницы, а еще лучше, лишить его возможности совершить ошибку вовсе. | |
|
|
|
|
|
|
|
для: Temnovit
(19.01.2009 в 13:47)
| |
<script type="text/javascript" language="javascript">
function update_checkbox_list(obj, limit){
var chec = 0;
for(var i = 0, len = obj.elements.length; i < len; i++){
if(obj[i].type == 'checkbox'){
chec+=(obj[i].checked)? 1 : 0;
}
}
for(var i = 0, len = obj.elements.length; i < len; i++){
if(obj[i].type == 'checkbox'){
if(chec >= limit && obj[i].checked == false) obj[i].disabled = true; else obj[i].disabled = false;
}
}
}
</script>
<form onClick="update_checkbox_list(this, 4);">
<input name="arr[]" type="checkbox" value="1">
<input name="arr[]" type="checkbox" value="2">
<input name="arr[]" type="checkbox" value="3">
<input name="arr[]" type="checkbox" value="4">
<input name="arr[]" type="checkbox" value="5">
<input name="arr[]" type="checkbox" value="6">
<input name="name_submit" type="submit" value="отправить форму" />
</form>
|
Смущает то как вызываю функцию, да и вааще.. попинайте.. | |
|
|
|
|
|
|
|
для: mikha
(19.01.2009 в 15:34)
| | Отлично, все работает как надо и во всех браузерах тоже. Чуть дописал функцию, чтобы можно было в передлах одной формы обрабатывать несколько групп чекбоксов (добавил параметр name):
<script type="text/javascript" language="javascript">
function update_checkbox_list(obj, limit, name){
var chec = 0;
for(var i = 0, len = obj.elements.length; i < len; i++){
if(obj[i].type == 'checkbox' && obj[i].name == name){
chec+=(obj[i].checked)? 1 : 0;
}
}
for(var i = 0, len = obj.elements.length; i < len; i++){
if(obj[i].type == 'checkbox' && obj[i].name == name){
if(chec >= limit && obj[i].checked == false)
obj[i].disabled = true;
else
obj[i].disabled = false;
}
}
}
</script>
|
mikha, большое спасибо :) | |
|
|
|
|
|
|
|
для: Temnovit
(19.01.2009 в 16:41)
| | Тогда уж как то вот так. Таблица и див для примера.
<script type="text/javascript" language="javascript">
function update_checkbox_list(in_, limit){
var obj = in_.getElementsByTagName('input');
var chec = 0;
for(var i = 0, len = obj.length; i < len; i++){
if(obj[i].type == 'checkbox'){
chec+=(obj[i].checked)? 1 : 0;
}
}
for(var i = 0, len = obj.length; i < len; i++){
if(obj[i].type == 'checkbox'){
if(chec >= limit && obj[i].checked == false) obj[i].disabled = true; else obj[i].disabled = false;
}
}
}
</script>
<form action="">
<div onClick="update_checkbox_list(this, 4);">
<input name="arr[]" type="checkbox" value="1" />
<input name="arr[]" type="checkbox" value="2" />
<input name="arr[]" type="checkbox" value="3" />
<input name="arr[]" type="checkbox" value="4" />
<input name="arr[]" type="checkbox" value="5" />
<input name="arr[]" type="checkbox" value="6" /></div>
<table onClick="update_checkbox_list(this, 4);"><tr>
<td><input name="arr2[]" type="checkbox" value="1" /></td>
<td><input name="arr2[]" type="checkbox" value="3" /></td>
<td><input name="arr2[]" type="checkbox" value="2" /></td>
<td><input name="arr2[]" type="checkbox" value="4" /></td>
<td><input name="arr2[]" type="checkbox" value="5" /></td>
<td><input name="arr2[]" type="checkbox" value="6" /></td></tr></table>
<input name="name_submit" type="submit" value="отправить форму" />
</form>
|
| |
|
|
|