Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с elem.getElementsByClassName(className) (https://javascript.ru/forum/misc/30217-problema-s-elem-getelementsbyclassname-classname.html)

PashPP 28.07.2012 01:05

Проблема с elem.getElementsByClassName(className)
 
Доброго времени суток еще раз. В общем, замучался с таким кодом, почему-то при обращении по селекторам цсс, упорно возвращает обьект вместо числа.

<script>
  function ddd (){
    var elements = document.querySelectorAll('#allparam>.param input:first-child ');
  
  var rrr = 0 
    for (var i=0; i<elements.length; i++) {
      parseInt(elements[i].value, 10)
      alert(typeof(elements[i])+ typeof(rrr))
       rrr += elements[i].value 
    }
alert(rrr)
}



    function counter1(e, idd) {
        var val= parseInt(document.getElementById(idd).value, 10);
        var new_val= val + e;

        if (new_val>=50) {
            new_val=50
        }
        if (new_val <= -50){
            new_val= -50
        }
        document.getElementById(idd).value= new_val
            }



</script>

<div id="allparam">
        <div class="param">
        <input id="health" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'health')" /> <input type="button" value="-5" onclick="counter1(-5, 'health')" />
        <label for="health">Здоровье</label>
        </div>
        <div class="param">
        <input id="beauty" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'beauty')" /> <input type="button" value="-5" onclick="counter1(-5, 'beauty')" />
        <label for="beauty">Красота</label>
        </div>
        <div class="param">
        <input id="streng" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'streng')" /> <input type="button" value="-5" onclick="counter1(-5, 'streng')" />
        <label for="streng">Сила</label>
        </div>
        <div class="param">
        <input id="education" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'education')" /> <input type="button" value="-5" onclick="counter1(-5, 'education')" />
        <label for="education">Образованность</label>
        </div>
        <div class="param">
        <input id="smart" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'smart')" /> <input type="button" value="-5" onclick="counter1(-5, 'smart')" />
        <label for="smart">Интеллект</label>
        </div>
        <div class="param">
        <input id="social" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'social')" /> <input type="button" value="-5" onclick="counter1(-5, 'social')" />
        <label for="social">Социализированность</label>
        </div>
        <div class="param">
        <input id="many" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'many')" /> <input type="button" value="-5" onclick="counter1(-5, 'many')" />
        <label for="many">Финансы</label>
        </div>
        <div class="param">
        <input id="luck" size="2" maxlength="2" value="0" readonly></label> <input type="button" value="+5" onclick="counter1(5, 'luck')" /> <input type="button" value="-5" onclick="counter1(-5, 'luck')" />
        <label for="luck">Удачливость</label>
        </div>
    </div>

PashPP 28.07.2012 01:09

поправочка. с elem.querySelectorAll(css)

oneguy 28.07.2012 01:28

Я не совсем понял, что вы имеете ввиду - 8-ю строку в коде? Естественно, что elements[i] возвращает объект-элемент DOM, а не число, а его свойство value возвращает строку.

PashPP 28.07.2012 01:32

Эм, нет. Сумму всех значений. Но я уже разобрался сам. Проблема была в
parseInt(elements[i].value, 10). нужно назначить переменную и приравнять ее к parseInt(elements[i].value, 10). Ну и еще в пример то ли от научного метода тыка пострадал, то ли я уже слишком устал , но везду должно быть elements[i].value.

devote 28.07.2012 01:33

function ddd (){
    var elements = document.querySelectorAll('#allparam>.param input:first-child ');

    var rrr = 0 

    for (var i=0; i<elements.length; i++ ) {
       rrr += ( parseInt( elements[ i ].value ) || 0 );
    }

    alert(rrr)
}

PashPP 28.07.2012 01:41

Цитата:

parseInt( elements[ i ].value ) || 0
а зачем тут этот ноль и почему он разделен "или"?

devote 28.07.2012 01:54

Цитата:

Сообщение от PashPP
а зачем тут этот ноль и почему он разделен "или"?

если parseInt не сможет преобразовать строку в число, тогда будет использован ноль


Часовой пояс GMT +3, время: 00:17.