使用 jquery 对表单中的一系列输入和选择字段进行求和和相乘
我有一个表单,其中有多个输入和选择字段。我需要将每个相应选择字段的值与输入字段相乘,然后将其全部相加。 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,但不适用于任何其他浏览器。
I have one form which has several input and select fields. I need to multiply value from each corresponding select field with input filed and sum it all up. 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>
I've been using sometnihg like this
$('#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);
});
}
);
This works on Firefox but not on any other browser.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 select 元素上使用
this.value
在不同浏览器中并不一致。您最好使用 jQuery 的方法从 select 元素中提取值。有关详细信息,请参阅 jQuery FAQ 中的此处(基本上,它说使用
select.val ()
)。其次,为什么要更改选择的 id 而不是直接在 html 中分配它们? ID 的更改在浏览器之间也不一致,可能会影响从 dom 访问元素的方式。我不明白你从中得到什么。
最后,如果性能很重要,那么不要使用
('#narudzba :hidden').eq(j+1)
获取隐藏值。由于这些隐藏字段有一个末尾带有数字的 id,因此您可以轻松地直接访问它们(您有参数j
并且您知道您正在处理哪个选择)。另一种方法是使用 jQuery.next() 并简单地导航到隐藏字段。Using
this.value
on the select element is not consistent across browsers. You are better of using jQuery's method to extract the value from the select element.See here in jQuery FAQ for details (basically, it says use
select.val()
).Secondly, why are you changing the id of the selects and not assigning them in the html directly? Changing of IDs is also not consistent across browsers and could affect the way elements are accessed from the dom. I don't see what you are gaining from that.
Finally, if performance is important, then don't grab the hidden value with
('#narudzba :hidden').eq(j+1)
. Since those hidden fields have an id with a digit at the end, it is easy for you to access them directly (You have the parameterj
and you know which select you are working on). An alternative is to usejQuery.next()
and simply navigate to the hidden field.