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

HTML+CSS+JavaScript

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

 

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

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

тема: Работа с чекбоксами генерируемыми динамически
 
 автор: Temnovit   (19.01.2009 в 13:47)   письмо автору
 
 

Здравствуйте!

Помогите, пожалуйста, с решением такой задачи:

У меня есть список чекбоксов, генерируемый динамически, например:

<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()">

  Ответить  
 
 автор: mikha   (19.01.2009 в 14:16)   письмо автору
 
   для: Temnovit   (19.01.2009 в 13:47)
 

Вы лишаете посетителя права выбора, зачем его злить? Посетителя надо лелеять)))
Может выводить предупреждение? Что мол можно выделять только четыре чекбокса.
И пока он их не снимет, не отправлять форму.

  Ответить  
 
 автор: Valick   (19.01.2009 в 14:26)   письмо автору
 
   для: mikha   (19.01.2009 в 14:16)
 

Где логика?

  Ответить  
 
 автор: mikha   (19.01.2009 в 14:30)   письмо автору
 
   для: Valick   (19.01.2009 в 14:26)
 

Перечитал внимательнее ТС.
Если после снятия галки с какого нибуть чекбокса остальные опять становятся активными, то нормально.
Я подумал что выбрал четыре, всё, остальные неактивны и выбора больше нет. Т.е потом ничего не исправишь.
В принципе нормально.

  Ответить  
 
 автор: Temnovit   (19.01.2009 в 15:33)   письмо автору
 
   для: mikha   (19.01.2009 в 14:16)
 

>Вы лишаете посетителя права выбора, зачем его злить? Посетителя надо лелеять)))

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

  Ответить  
 
 автор: mikha   (19.01.2009 в 15:34)   письмо автору
 
   для: 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>

Смущает то как вызываю функцию, да и вааще.. попинайте..

  Ответить  
 
 автор: Temnovit   (19.01.2009 в 16:41)   письмо автору
 
   для: 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, большое спасибо :)

  Ответить  
 
 автор: mikha   (19.01.2009 в 17:32)   письмо автору
 
   для: 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>

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

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