Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   выбор value мз select'ов (https://javascript.ru/forum/dom-window/50574-vybor-value-mz-select%27ov.html)

new_guy 02.10.2014 11:52

выбор value мз select'ов
 
Добрый день. Подскажите пожалуйста по следующем моменту: на странице несколько селектов. Нужно, что бы при выборе какого то значения его value добавлялся в сумму. Застрял на моменте, когда меняется id селекта. Т.е. к текущей сумме добавляется новое значение.
Как можно подправить условие?
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-git2.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  
  <select id="section1" onchange="check_my_select(event)">
    <option value="1">value1</option>
    <option value="2">value2</option>
    <option value="3">value3</option>
  </select>
  <br />
  <select id="section2" onchange="check_my_select(event)">
    <option value="4">value1</option>
    <option value="5">value2</option>
    <option value="6">value3</option>
  </select>
  <hr />
  <label id="result">Итоговая стоимость</label>

</body>
</html>

function check_my_select(ev){
    var id = ev.target.id;
    var value_s = parseFloat($("#"+id+"   :selected").val());
    change_result(value_s, id);
}

var res = 0;
var old_val = 0;
var old_id = "";

function change_result(add_val, id_name){
  
  if (old_id == id_name){
    if(old_val != add_val){
      res = parseFloat(res - old_val + add_val);
    }
  }
  
  if (old_id != id_name){
    
      res = parseFloat(res + add_val);
    
  }
  
  $("#result").text(res);
  old_id = id_name;
  old_val = add_val;
  
}

kostyanet 02.10.2014 12:15

onchange="check_my_select(this)

function check_my_select(elem)

if(elem.id=='blah-blah')
// и так далее

kostyanet 02.10.2014 12:17

Это что за на? -

Цитата:

var value_s = parseFloat($("#"+id+" :selected").val());
Валуе в elem.value

от id зависит только значение значения. Ну то есть в зависимости от формулы. Если это сумма - вообще не зависит.

PS Вы похоже придумали что value лежит в option. Оно там есть, но select относится к категории переключателей и его value всегда равно value выбранного option. Из интерфейса options не может быть не выбран, а вот из скрипта можно поставить selectedIndex=-1. Вроде того.

ЗЗЫ Из кодов все равно не понял что вы там хотите посчитать, изложите ТЗ человеческим языком.

krasovsky 02.10.2014 12:26

Я может быть конечно не понимаю какого то сакрального значения всех твоих old_val и old_id но...

Если я правильно понял - у тебя несколько селектов из которых складывается общая стоимость, и при изменении ты хочешь пересчитывать ее?
Если так то не городи огороды, на это хватит 1й функции - в цикле пробежаться по всем селектам и суммировать их value. Все.

<select id="section1 mySelect" onchange="check_my_select(event)">
    <option value="1">value1</option>
    <option value="2">value2</option>
    <option value="3">value3</option>
  </select>
  <br />
  <select id="section2 mySelect" onchange="check_my_select(event)">
    <option value="4">value1</option>
    <option value="5">value2</option>
    <option value="6">value3</option>
  </select>

check_my_select = function(){
var result = 0;
$.each($('.mySelect'),function(){
result +=this.value;
})
$("#result").text(result );
}


Заметь я установил селектам класс что бы не дрючиться с id

new_guy 02.10.2014 12:31

Там ещё несколько чекбоксов будет.
Напиши пожалуйста пример функции (Хотяб для 2х селектов). Я пробовал, но у меня там кода больно много получается. Для value каждого селекта делал отдельную переменную.

new_guy 02.10.2014 12:41

Спасибо, разобрался!:) Для чекбоксов беру уже готовое значение из резалта и его правлю.

kostyanet 02.10.2014 15:10

Цитата:

Сообщение от new_guy
Там ещё несколько чекбоксов будет.

Значит
form.addEventListener('change',calc);

var calc=function(event) {

 var tokens='var res=';

 for(var i=0;i<this.elements.i++)
   tokens+=this.elements[i].value;

 tokens+=';';

 eval(tokens); 

 console.log(res); // тут результат

};


соответственно в option у вас выражение, а не число, например

<option value="-2">
<option value="/2">
<option value="/Math.sqrt(6)">

etc.

В принципе можно и без выражений, нормально, то есть вычитание это сложение с отрицательным, деление это умножение на обратную величину, извлечение корня - возведение в дробную степень и тп. :)


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