Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как отметить только три checkbox'a из пяти?


Автор: major 20.5.2007, 14:37
Создал опрос для голосований http://etph.org.ru/var/var2.php . Теперь нужно сделать так чтоб посетители отмечали только 3 chekboxs'a из 5 . Хочу сделать это на JavaScript'e, но не мыслю как сделать. 
Приведу исходный код голосования:

Код

<html>
<body BGCOLOR="#C1E7E7">
<table cellpadding="0" bgcolor="#C1E7E7">
<form action="/var/write.php" method="post">
<input type="hidden" name="name" value="var">
<colgroup align="right"></colgroup>
<colgroup></colgroup>
<tr>
  <td>
   <pre><font color="#0C5574" style="font-size:9px; font-family:Verdana">
Готовлюсь все отведенное 
время и не успеваю:         <input type="checkbox" name="vote[0]" value="1">

Успеваю за отведенное время 
подготвиться к экзамену:<input type="checkbox" name="vote[1]" value="1">

Готовлюсь последние 
один, два дня и сдаю:       <input type="checkbox" name="vote[2]" value="1">

Готовлюсь последние один,
два дня и проваливаю:     <input type="checkbox" name="vote[3]" value="1">

Сдаю экзамен за 
дополнительную плату:    <input type="checkbox" name="vote[4]" value="1">
      </font>     </pre>
   </td>
</tr> 
<tr>
   <td align="center">

     <input type="submit" value="Голосовать">
   </td>
</tr>
</form>
</table>
</body>
</html>


Как видно подсчет результата выполняется на php.

Большая просьба помочь! Заранее благодарствую. 

Автор: igorold 21.5.2007, 08:46
У меня получилось - так, правда я заменил имена ( с vote[o] на vote0 ...), а то не получалось .... если никто не откликнется - попробуй так:

Код

function checkr(f)
{
i=0;
    if (f.vote0.checked==true) { i++; }
    if (f.vote1.checked==true) { i++; }
    if (f.vote2.checked==true) { i++; }
    if (f.vote3.checked==true) { i++; }
    if (f.vote4.checked==true) { i++; }
    if (i>2)
    {
        if (f.vote0.checked!=true) { f.vote0.disabled = true; }
        if (f.vote1.checked!=true) { f.vote1.disabled = true; }
        if (f.vote2.checked!=true) { f.vote2.disabled = true; }
        if (f.vote3.checked!=true) { f.vote3.disabled = true; }
        if (f.vote4.checked!=true) { f.vote4.disabled = true; }
    }
    else
    {
        f.vote0.disabled = false;
        f.vote1.disabled = false;
        f.vote2.disabled = false;
        f.vote3.disabled = false;
        f.vote4.disabled = false;
    }
}

Код

<pre><font color="#0C5574" style="font-size:9px; font-family:Verdana">
    Готовлюсь все отведенное
    время и не успеваю:         <input type="checkbox" name="vote0" value="1" onClick="checkr(this.form)">
    Успеваю за отведенное время
    подготвиться к экзамену:    <input type="checkbox" name="vote1" value="1" onClick="checkr(this.form)">
    Готовлюсь последние
    один, два дня и сдаю:       <input type="checkbox" name="vote2" value="1" onClick="checkr(this.form)">
    Готовлюсь последние один,
    два дня и проваливаю:       <input type="checkbox" name="vote3" value="1" onClick="checkr(this.form)">
    Сдаю экзамен за
    дополнительную плату:       <input type="checkbox" name="vote4" value="1" onClick="checkr(this.form)">
</font></pre


Автор: 12345c 21.5.2007, 13:01
Код

<form name=fo1 onsubmit=return(ff());>
<input type="checkbox" name="vote0"><br>
<input type="checkbox" name="vote1"><br>
<input type="checkbox" name="vote2"><br>
<input type="checkbox" name="vote3"><br>
<input type="checkbox" name="vote4"><br>
<input type=submit value=Send></form>
<script>
d=document;
ff=function(){var s=0;
  for(var i=0;i<5;i++)s+=(d.getElementsByName('vote'+i)[0].checked?1:0);
alert(s);return false;
}</script>
На месте алерт-а нужно попросить посетителя оставить только 3 отметки - автоматически нельзя выбросить что-то, судя по задаче. И если будет s<=3, то возвращать  return true; (форма отправится).

Автор: igorold 21.5.2007, 14:09
Цитата(12345c @  21.5.2007,  13:01 Найти цитируемый пост)
На месте алерт-а нужно попросить посетителя оставить только 3 отметки - автоматически нельзя выбросить что-то, судя по задаче. И если будет s<=3, то возвращать  return true; (форма отправится).

а если человек отметил, а потом раздумал и исправил ... тогда идея моего варианта - делать неотмеченные чекбоксы как disabled лучше ... 
А по твоему варианту отметил 3 и "вылетел" ... у нас в России так нельзя  smile 

я не стал в цикле все делать, чтобы наглядно было ...  smile 

Автор: dstorm81 21.5.2007, 14:12
2 igorold, может лучше перестроить логику голосования, написав например не 5 а 10 варантов?
но зато конкрететизированных.
З.Ы. на самом деле чем проще тем лучше.
З.З.Ы. маловероятно, но скрипты по сути можно отключить, и логика будет нарушена

Добавлено через 1 минуту и 31 секунду
на радиокнопках разумеется сделать

Автор: igorold 21.5.2007, 14:33
dstorm81, ну это пусть major думает какие варианты ему нужны ... мне просто было интересно придумать идею как реализовать, что он просит ...  smile 

а если делать на радиокнопках, тогда ему надо сгруппировать варианты по взаимоисключению, но тогда выбор получиться фиксированным, а ему надо НЕ БОЛЕЕ 3 ... насколько я понял ... 

Автор: smartov 21.5.2007, 17:08
Цитата(igorold @  21.5.2007,  13:09 Найти цитируемый пост)
а если человек отметил, а потом раздумал и исправил

Так и прекрасно. Пусть исправляет.

Цитата(igorold @  21.5.2007,  13:09 Найти цитируемый пост)
А по твоему варианту отметил 3 и "вылетел" ...

Убрал ненужную - отметил другую, что надо.

Надо только допистаь чуть функцию чтобы 
Цитата(12345c @  21.5.2007,  12:01 Найти цитируемый пост)
И если будет s<=3, то возвращать  return true; (форма отправится).


А так такой вариант лаконичнее и более приемлем.

Автор: major 21.5.2007, 17:38
Народ!!! Спасибо за помощь! Мне уже помогли на другом форуме http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=37809&page=1

Кто хочет посмотреть и проголосовать http://etph.org.ru/var/var2.php

Автор: Sultanische 11.7.2007, 15:12
мда начитался и прозревал ))))

Код


    function check(checker)
    {
        if (checker.checked)
        {
            if (count>=5)
            { 
                checker.checked = false; 
                return false; 
            }
            count++;
        }
        else
         count--;
    }




а везде в коде ставим 

Код

onclick="check(this)"



мда....люди люди


Автор: smartov 11.7.2007, 15:35
Цитата(Sultanische @  11.7.2007,  14:12 Найти цитируемый пост)
мда....люди люди

Молодец. Коротко и доступно.
Жаль только проблемка есть.
Если я галочку то возьму, да с клавиатуры отмечу, то и сказочке конец.

Автор: Sultanische 11.7.2007, 16:00
http://www.black-neverlands.ru/r_players.php


ну на нажимай с клавиатуры )))) у меня шот не получилося с клавы вбить больше 5 галок 

Автор: smartov 11.7.2007, 17:48
Sultanische, занимательно. Раньше не во всех браузерах выбор с клавы вызывал событие onclick. Когда-то с этим мучался. Что ж. Значит теперь проще smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)