Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Скрипт не хочет работать с радио переключателем!


Автор: jone31 17.1.2009, 10:24
Вот пишу один небольшой скриптик, но он работает только с чекбоксами, а мне хотелось бы что б и радио переключателями тоже работает! 
Вот часть кода скрипта:
Код

<script LANGUAGE="JavaScript">
function calc(form) {
...
if (form.time.checked){
var time=parseFloat(form.time.value);
}
else time=0;

var total=......+time+......;
document.getElementById("total").innerHTML=total;
}
</SCRIPT>


На странице пишу:
Код

<table>......
<tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time" value="1000">&nbsp;1 неделя</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time"  value="2000">
    &nbsp;2 недели</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time" value="3000">&nbsp;3 недели</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time" value="4000">&nbsp;4 недели</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time" value="5000">&nbsp;5 недель</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time" value="6000">&nbsp;6 недель</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="left"><INPUT type="radio" name="time" value="7000">
    &nbsp;7 недель</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td align="center"><b>Сумма:</b></td>
    <td ><div id="total">0</div></td>
  </tr>......
</table>



Как мне сделать чтоб он работал с радио переключателем???

Добавлено через 7 минут и 26 секунд
Я подозреваю что в коде скрипта нужно вместо checked, нужно написать что то другое! 

Автор: Elfebet 17.1.2009, 12:17
ты обращаешся к группе радиобутонов а не конкретно к одному
Код

form.time.checked

поэтому этот checked не сработает, если обращаться к конкретному радиобутону checked будет уместен
а что собсвтенно ты хочеш сделать? узнать значение не чекнутом радиобутоне ?
если да - то поставь по умолчанию checked на радиобутон (чтобы в любом случае был чекнутый) и
Код

form.time.value


Автор: jone31 17.1.2009, 13:33
Я собираюсь сделать небольшой калькулятор, точнее я его уже сделал, но вот он берет значения только с чеков, а вот с группы радио бутонов не хочет!

Принцип такой: Пользователь кликнул на чек, скрипт по "name" этого чека берет его "value"  и прибавляет его к числу "total".  

А вот сделать такое же с радио бутоном неполучается! Без него никак наверно не обойтись! У меня на странице перед пользователем стоит выбор из нескольких пунктов, и наскока я знаю это можно сделать только с радио бутонов.

Добавлено через 2 минуты и 10 секунд
Мне тут пришла идейка, а можно ли сделать так что бы при активации одного чека из определенной группы, то остальные чеки из этой группы снимались???

Автор: Elfebet 17.1.2009, 17:19
Цитата(jone31 @ 17.1.2009,  13:33)
Мне тут пришла идейка, а можно ли сделать так что бы при активации одного чека из определенной группы, то остальные чеки из этой группы снимались???

это изващение smile

сорри в моем посте ошибка, вот пример рабочий с радио 
Код

<html>
<head>
<script LANGUAGE="JavaScript">

    function getValue() {
        
        var radioGroup = document.form1.time;
        for(var i=0; i < radioGroup.length; i++) {
            if(radioGroup[i].checked) {
                alert('Name = ' + radioGroup[i].name + ' Number = ' + i + ' ID = ' + radioGroup[i].id + ' Value = ' +  radioGroup[i].value);
                break;
            }
        }
    }

</script>
</head>
<body>

<form name="form1">
    <input type="radio" name="time" value="100" checked id="t1"><label id="t1">100</label><br>
    <input type="radio" name="time" value="200" id="t2"><label for="t2">200</label><br>
    <input type="radio" name="time" value="300" id="t3"><label for="t3">300</label><br>
    <input type="radio" name="time" value="400" id="t4"><label for="t4">400</label><br>
    <input type="button" value="click" onClick="getValue();">
</form>

</body>
</html>


Автор: jone31 17.1.2009, 19:40
Нет. Это не то что надо совсем! Я нарно вопрос не правильно поставил!

Вот http://jone31.narod.ru/index.htm кусок кода на. Надеюсь так будет понятней. 

Мне надо сделать так что бы при выборе пользователем одной из радио бутонов value этого бутона прибавилась к основному числу!

Автор: jone31 18.1.2009, 17:15
Люди??? Ау

Автор: Elfebet 19.1.2009, 10:39
я тебе привел пример как можно получить значение radio
а как прибавить число к освновному я думаю ты уже понял что нужно использовать onClick
как сделать в твоем случае вариантов много (можно поразному)  smile 

Автор: ksnk 19.1.2009, 11:32
Цитата

Мне тут пришла идейка, а можно ли сделать так что бы при активации одного чека из определенной группы, то остальные чеки из этой группы снимались???

это изващение 

Ну, в обще-м то да. smile Хотя чекбокс в радиобатон превращается просто... Нужно в коде перераскомментировать radiobutton='checkbox';

Еще мысль - а зачем бегать по радиобаттонам и проверять чиканутость? Пусть они сами куда надо складывают свое значение...
Код

<table id="table">
<script>
radiobutton='radio';
//radiobutton='checkbox';

for(i=1;i<=6;i++){
document.write('<tr><td>&nbsp;</td>'+
    '<td align="left"><INPUT type="'+ radiobutton +'" name="time" value="'+(i*1000)+'">&nbsp;'+
    i+' недел'+(i==1?'я':i<5?'и':'ь')+
    '</td><td>&nbsp;</td></tr>')
}
</script>
<tr>
    <td>&nbsp;</td>
    <td align="center"><b>Сумма:</b></td>
    <td ><div id="total">0</div></td>
  </tr>
</table>
<script>
var tab=document.getElementById('table'),chb=tab.getElementsByTagName('input'),cbl=chb.length;
while(cbl--){
    if (radiobutton!='radio')
      chb[cbl].onmousedown=function(){
        var t=chb.length;
        while(t--){
          chb[t].checked=false;
        }
        document.getElementById('total').innerHTML='0';
      }
    chb[cbl].onclick=function(){
    if(this.checked)
        document.getElementById('total').innerHTML=this.value;
    }
}

</script>








Автор: jone31 19.1.2009, 20:56
Спасибо всем! Но вот вариант ksnk мне больше всех понравился! 


Тема закрыта!

Автор: jone31 20.1.2009, 16:15
Мда... Вставил я тот скрипт, промучился с ним весь вечер, но так и не смог решить мою проблемму.
Скрипт это то что надо, но вот когда я подставляю его в мою таблицу с моим скриптом, то вся таблица "разваливается" и этот скрипт работает по принципу - или мой или этот, т.е. если я вставляю этот код в начало страницы, то мой скрипт уже неработает и таблица не "разваливается"; если вставляю в середину(там где он мне нужен) то таблица "разваливается", все что ДО этого кода работает(и сам тот код) а все что после этого скрипта не работает; Если ставлю в конец то работает только мой скрипт! 

Вчера весь вечерал его "ковырял" и ни чо не получилось! Чо делать незнаю! Подскажите, плиз!

Автор: ksnk 20.1.2009, 17:01
Цитата

Чо делать незнаю! Подскажите, плиз!

Наверное, ждать телепатов?

Автор: Elfebet 20.1.2009, 18:54
код покажи вместе со скриптом и таблицей твоей

Автор: jone31 20.1.2009, 19:49
Вот выложил тот скрипт!

Автор: ksnk 20.1.2009, 20:28
Скрипт из середины текста выкинуть и поставить вот это в конец файла...
Код

<script> 
<!--
var tr=document.getElementById('table'),chb=tr.getElementsByTagName('input'),
    cbl=chb.length,radio_val={};

function recalc(){
    var i=0;
    for(a in radio_val)
       i+= radio_val[a];
    document.getElementById('total2').innerHTML=i;
}

while(cbl--){
    var tp=chb[cbl].type||'';
    if (tp=='radio' || tp=='checkbox')
        chb[cbl].onchange=function(){
            if(this.checked)
                radio_val[this.name]=parseInt(this.value);
            else 
                radio_val[this.name]=0;
            recalc();
        }
}
--> 
</script>

Автор: jone31 20.1.2009, 21:41
Ага. Все работает! Спасибо!

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