Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Цикл для функции (https://javascript.ru/forum/misc/58265-cikl-dlya-funkcii.html)

orb 12.09.2015 19:23

Цикл для функции
 
Есть Select у которого есть id и с тремя option.
На странице есть <span id="priceraw2">Тут какое-то число</span>

Мне нужно было, чтобы при смене опции менялось значение в этом id="priceraw2", например умножалось. Если стоит опция 1, то значение не меняется, если опция 2, то значение умножается на 20, если значение три, то умножается на 40.

Решил таким образом, все отлично работает.


var default_result=document.getElementById('priceraw2').innerHTML;

(function(){
    var sel=document.getElementById('currency-select');
    my_func(sel);
})()

function my_func(sel){
    var 
        opts=[],
        opt,
        val,
        divider={'1':'1','2':'30','3':'40'},
        result=default_result
    ;
    for(var i=0;i<sel.options.length;i++){
        opt=sel.options[i];
        if(opt.selected){
            val=opt.value;
            opts.push(val);
            val=divider[val];
        }
    }
    if(opts.length==0){
        result=default_result;
    }else{
        result=default_result*val;
        result = Math.round(result);
    }
    document.getElementById('priceraw2').innerHTML=result;
}


Но как сделать, чтобы этот скрипт выполнялся везде и для всех?
Например, на странице может быть 20 или 1000 блоков в которых есть <span id="priceraw2">Тут какое-то число</span>, но функция выполняется только для первого блока.

На странице может быть еще всплывающее окно с <span id="priceraw2">Тут какое-то число</span>, как сделать, чтобы скрипт выполнялся для каждого блока и везде?

рони 12.09.2015 20:13

orb,
id уникально :cray: и for нафиг

orb 13.09.2015 14:01

мм... не понял

рони 13.09.2015 14:05

orb,
пару блоков нарисуйте как они у вас выглядят

orb 13.09.2015 16:01

Вложений: 1
Скрипт, который выше все прекрасно делает, только вот изменения происходят для первого блока, а нужно, чтобы это происходило для каждого тега <span id="priceraw2"> </span> который есть на странице или появляется.

Причем еще на странице блоки могут подгружаться при скролле и нужно, чтобы скрипт это улавливал.

Думал написать цикл, но что-то не вышло)

рони 13.09.2015 17:09

orb,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>

</head>

<body>
<select class="sel" name="" size="1">
<option value="1">1</option>
<option value="50">2</option>
<option value="20">3</option>
</select>
<span class="price" data-num="100"></span>
<span class="price" data-num="200"></span>
<span class="price" data-num="300"></span>
<script>
   var sel = document.querySelector('.sel'), price = document.querySelectorAll('.price'),
   fn = function() {
            var val = this.value;
              [].forEach.call(price, function(item) {
           item.innerHTML = item.dataset.num * val + "$"
       } )};
   sel.addEventListener('change', fn);
   fn.call(sel)
</script>

</body>

</html>


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