Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Если выбрал этот чекбокс то другие снялись, это возможно? 
V
    Опции темы
SeregaGREY
Дата 12.10.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Вот возможно ли такое: если я выберу несколько чекбоксов а потом выберу определённый чекбокс и если я его нажму то остальные чекбоксы снимуться. и так же если я выберу этот определённый чекбокс а потом выберу обычныу чекбокс то определённый чекбокс снимется. не запутал? smile это возможно?

вот пример:
выбираем:
1.мальчик
2.девочка
3.оно

чел сначала выбрал мальчик, но потом решил что хочет и мальчик и девочка, но чтобы не отмечать 2 чекбокса лучше выбрать один "оно", что он и сделает и когда он его отметит то чекбокс "мальчик" уберётся.

и наоборот: выбрал он "оно" а потом передумал и хочет только "девочка" и выбрал девочка и чекбокс "оно" убрался.
PM MAIL   Вверх
sergejzr
Дата 12.10.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата(SeregaGREY @  12.10.2006,  16:23 Найти цитируемый пост)
Вот возможно ли такое

да.

Код

<input type="chekbox" id="boy" onclick="checkTheBox(this)" />
<input type="chekbox" id="girl" onclick="checkTheBox(this)" />
<input type="chekbox" id="it" onclick="checkTheBox(this)" />

<script type="text/javascript">
//<!--
function checkTheBox(el)
{
boy=document.getElementById('boy');
girl=document.getElementById('girl');
it=document.getElementById('it');

switch(el.id){
case 'boy':{it.checked=!boy.checked}break;
case 'girl':{it.checked=!girl.checked}break;
case 'it':{boy.checked=girl.checked=!it.checked}break;
}
}
//-->
</script>



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 12.10.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



SeregaGREY, а тебе не кажеться, что radio для этого лучше подходит?

sergejzr, вместо перечисления всех инпутов проще опросить их у внешнего контейнера (передать по ид, т.к. вёрстка может меняться), отключить все кроме того, по кому кликнули (event.(srcElement/target)).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
sergejzr
Дата 12.10.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Цитата(Sardar @  12.10.2006,  17:12 Найти цитируемый пост)
sergejzr, вместо перечисления всех инпутов проще опросить их у внешнего контейнера (передать по ид, т.к. вёрстка может меняться), отключить все кроме того, по кому кликнули (event.(srcElement/target)). 

Нет, они ведут себя по-разному (как я понял). Включаются/отключаются по оределённой схеме. Всех тут под одну гребёнку не возьмёшь.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
SeregaGREY
Дата 12.10.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



sergejzr, я заменил chekbox на checkbox но всё равно неработает smile как должно


Sardar, радио то там же можно только одно значение выдрать, а если чел не захочет выбрать "оно" а решит выбрать "девочка" и "мальчик" одновременно? тогда у него неполучиться если будет радио.

как это всётаки можно сделать?
PM MAIL   Вверх
AKS
Дата 12.10.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



SeregaGREY,  не работает в IE? Тогда так:
Код

var boy = document.getElementById('boy');


Это сообщение отредактировал(а) AKS - 12.10.2006, 20:23
PM MAIL   Вверх
SeregaGREY
Дата 12.10.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



а как быть при неограниченном количестве чекбоксов?
тоесть если их 100 штук то их все нужно обозначать как girl boy? или можно как то это обойти и просто задать условие что если нажат чекбокс "оно" то любые чекбоксы на странице снимаются , а если любой из чекбоксов на странице нажат то снимется чекбокс "оно"?

так можно?
PM MAIL   Вверх
AKS
Дата 13.10.2006, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(SeregaGREY @ 12.10.2006,  21:06)
а как быть при неограниченном количестве чекбоксов?

Можно попробовать таким образом:
Код

<div id='slaves' style='border-top:1px solid black;'>
  <input type='checkbox' id='boy' /><label for='boy'>выбрать мальчика</label><br />
  <input type='checkbox' id='girl' /><label for='girl'>выбрать девочку</label><br />
  <input type='checkbox' id='man' /><label for='man'>выбрать мужчину</label><br />
  <input type='checkbox' id='woman' /><label for='woman'>выбрать женщину</label>
</div>
<div id='master' style='border-top:1px solid black;'>
  <input type='checkbox' id='all' /><label for='all'>выбрать всех</label>
</div>
<script type="text/javascript">
/*<![CDATA[*/ 
(function(master, slaves) {
  var mm = master.childNodes, ss = slaves.childNodes;
  function F(e, a) {
    e = (e = e || event).srcElement || e.target; 
    if(e.tagName.toLowerCase() == 'input' || e.tagName.toLowerCase() == 'label' && !e.checked)
      for(var i = 0, l = a.length; i < l; i++) 
        if(a[i].checked) a[i].checked = 0;
  }
  master.onclick = function(e) { return F(e, ss); }
  slaves.onclick = function(e) { return F(e, mm); }
})(document.getElementById('master'), document.getElementById('slaves'));
/*]]>*/
</script> 

PM MAIL   Вверх
SeregaGREY
Дата 13.10.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



СПАСИБО всем! В конце концов добился того, чего хотел.
PM MAIL   Вверх
SeregaGREY
Дата 13.10.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



А хотя поспешил я smile
Нет у меня возможности обозначить разные чекбоксы разными <div>

У меня в скрипте всё так идёт:
Код

<input type=checkbox id="<?=$k?>" name="<?=$k?>" <?=$c?> ><?=$v?><br>


то есть первый вариант от sergejzr, практически идеально подходил (если бы не обозначать каждый чекбокс своими именами в скрипте через var.

может этот вариант можно модифицировать?
PM MAIL   Вверх
AKS
Дата 13.10.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(SeregaGREY @ 13.10.2006,  11:19)
...если бы не обозначать каждый чекбокс своими именами в скрипте через var.

А Вам этого делать не нужно. Вам нужно "выделить" из общей кучи один-единственный элемент, который изначально Вы определяли, как "оно". В результате получится следующее - один мастер-чекбокс и массив со всеми остальными. Все остальное у Вас уже есть (я имею ввиду варианты решения)...
PM MAIL   Вверх
SeregaGREY
Дата 13.10.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(AKS @ 13.10.2006,  11:34)
Цитата(SeregaGREY @ 13.10.2006,  11:19)
...если бы не обозначать каждый чекбокс своими именами в скрипте через var.

А Вам этого делать не нужно. Вам нужно "выделить" из общей кучи один-единственный элемент, который изначально Вы определяли, как "оно". В результате получится следующее - один мастер-чекбокс и массив со всеми остальными. Все остальное у Вас уже есть (я имею ввиду варианты решения)...

Но определить его не получиться! я же говорю, что он в общей куче находиться:
Код

<input type=checkbox id="<?=$k?>" name="<?=$k?>" <?=$c?> ><?=$v?><br>
<input type=checkbox id="<?=$k?>" name="<?=$k?>" <?=$c?> ><?=$v?><br>
<input type=checkbox id="<?=$k?>" name="<?=$k?>" <?=$c?> ><?=$v?><br>
и т.д.

тоесть его можно определить только по его id. а <div> туда никак не вставишь. как можно его определить по id? то есть если нажали на id=1 то все остальные id снимуться, и если нажали на любой id то id=1 снимется?
PM MAIL   Вверх
Zeroglif
Дата 13.10.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(SeregaGREY @  13.10.2006,  11:56 Найти цитируемый пост)
тоесть его можно определить только по его id. а <div> туда никак не вставишь. как можно его определить по id? то есть если нажали на id=1 то все остальные id снимуться, и если нажали на любой id то id=1 снимется?


Я бы повесил событие на ноду, в которой живут чекбоксы:

Код

<html>
    <body>
        <div onclick="F(event,this,'it')">
            <input type="checkbox" id="boy"><br>
            <input type="checkbox" id="girl"><br>
            <input type="checkbox" id="it">
            <label for='it'>all</label>
        </div>
        <script type="text/javascript">
        function F(e, p, a) {
            var t = e.srcElement || e.target, c = p.childNodes, i = c.length;
            if (!F(t)) return;
            function F(n) {
                return (n.type && n.type.toLowerCase() == 'checkbox');
            }
            if (t.id == a) {
                while (i--) { 
                    if (F(c[i])) c[i].checked = t.checked;
                }
            } 
            else document.getElementById(a).checked = false;
        }
        </script>
    </body>
</html>


По желанию можно ещё слегка оптимизировать:

- вместо childNodes использовать getElementsByTagName('*');
- ссылки на все чекбоксы после первого же прохода сохранить в массив и в дальнейшем пользоваться им;

Это сообщение отредактировал(а) Zeroglif - 13.10.2006, 13:59
PM MAIL WWW   Вверх
SeregaGREY
Дата 13.10.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Zeroglif, это прямая противоположность тому что я хотел. когда ты выбираешь all то остальные чекбоксы должны сняться а не поставиться.
PM MAIL   Вверх
Zeroglif
Дата 13.10.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(SeregaGREY @  13.10.2006,  14:13 Найти цитируемый пост)
должны сняться а не поставиться

Сорри, невнимательно прочитал. Думал, нужна переключалка туда-сюда...

Поменяй:

Код

                while (i--) { 
                    if (F(c[i])) c[i].checked = t.checked;
                }


на

Код

                while (i--) {
                    if (F(c[i]) && c[i] != t) c[i].checked = false;
                }


PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0820 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.