суммируйте и умножайте ряды ввода и выбирайте поля в форме с помощью jquery - PullRequest
0 голосов
/ 22 марта 2011

У меня есть одна форма, которая имеет несколько полей ввода и выбора. Мне нужно умножить значение из каждого соответствующего поля выбора с входным полем и суммировать все это. sel1 * inp2 + sel2 * inp2 + ....

<form id="myForm" >
   <select id="sel1" >
       <option value="1" >1</option>
       <option value="1" >2</option>
       <option value="1" >3</option>
       <option value="1" >4</option>
    </select>
    <input type="hidden" value="200" id="inp1"/>
   <select id="sel2" >
       <option value="1" >1</option>
       <option value="1" >2</option>
       <option value="1" >3</option>
       <option value="1" >4</option>
    </select>
    <input type="hidden" value="300" id="inp2"/>
   <select id="sel3" >
       <option value="1" >1</option>
       <option value="1" >2</option>
       <option value="1" >3</option>
       <option value="1" >4</option>
    </select>
    <input type="hidden" value="600" id="inp3"/>
    <input type="text" id="total" name="sum"/>
  </form>

Я использовал Sometnihg, как это

  $('#myForm select').each(
    function(i){                
        $(this).attr('id','kol'+i);
        $(this).change( function(){
             var total = parseFloat(0);
             $('#myForm select').each(
                 function(j){ 
                total +=  parseFloat(this.value) * parseFloat($('#myForm :hidden').eq(j+1).val());
                 }
            );
        $("#total").attr("value",total);
        });
    }
);

Это работает в Firefox, но не в любом другом браузере.

1 Ответ

2 голосов
/ 22 марта 2011

Использование this.value в элементе выбора не согласовано во всех браузерах. Вам лучше использовать метод jQuery для извлечения значения из элемента select.

Подробнее см. здесь в jQuery FAQ (в основном, это говорит об использовании select.val()).

Во-вторых, почему вы меняете идентификатор выбора, а не присваиваете его в html напрямую? Изменение идентификаторов также не согласовано в разных браузерах и может повлиять на способ доступа к элементам из домена. Я не понимаю, что вы получаете от этого.

Наконец, если важна производительность, не берите скрытое значение с помощью ('#narudzba :hidden').eq(j+1). Поскольку эти скрытые поля имеют идентификатор с цифрой в конце, вам легко получить к ним доступ напрямую (у вас есть параметр j, и вы знаете, над каким из них вы работаете). Альтернатива - использовать jQuery.next() и просто перейти к скрытому полю.

...