我有一个基本form
,用户选择option
并输入数量。到input
然后一个基本的jquery脚本将这些数字相乘得到一个总数。但唯一的问题是它没有实时更新。你必须亲眼看到它:http://jsfiddle.net/iamjosan/4T9Wq/
$('.setPrice').on('change', function () {
var s = +$(this).find('option:selected').data('price');
var q = +$('#quantity').val();
if (q > 1) {
var price = s * q;
} else {
price = s;
}
$('#showPrice').val(price.toFixed(2));
});
如何让脚本实时更新值?
修改
选择input
后更改option
值(大于1)会产生NaN,但在选择input
之前更改option
值会显示实际值。
答案 0 :(得分:3)
使用input
或keyup
,因为change
并非实时触发,具体取决于浏览器:
只要用户修改了控件的数据,就会触发
input
事件。 提交值时会触发change
事件,如果控件有意义则触发,或者当控件失去焦点时。在所有情况下,input
事件都发生在相应的change
事件(如果有)之前。 (source)
另外,在您的具体情况下,您需要从正确的元素中检查商品的价格:
var s = +$("#size").find('option:selected').data('price');
不要忘记将id
属性添加到正确的<select>
。否则,您在当前元素上下文中查找选定的选项,可能是<input>
。
总体而言(fiddle):
$('.setPrice').on('keyup change', function () {
var s = +$("#size").find('option:selected').data('price');
var q = +$('#quantity').val();
var price = q > 1 ? s * q : s;
$('#showPrice').val(price.toFixed(2));
});
请注意,我添加了change
,因为您通常不会将键盘用于<select>
(但您可以这样做,这就是为什么添加{{{ 1}}到那个元素)。
答案 1 :(得分:0)
将您的javascript更新为:
function calculate(){
var s = $('select.setPrice').find('option:selected').data('price');
var q = $('#quantity').val();
if(q > 1){
var price = s * q;
}
else{
price = s;
}
$('#showPrice').val(price.toFixed(2));
}
$('select.setPrice').on('change', function () {
calculate();
});
$('input[name="os3"]').on('keyup',function(){
calculate();
});
答案 2 :(得分:0)
检查一下: http://jsfiddle.net/techsin/4T9Wq/5/
var p = $('.showPrice'), q= $('.quantity'), s= $('.size');
$('.setPrice').on('change', function () {
var num = q.val(), price= s.find(':selected').data('price');
if ((!isNaN(num))&&price) p.val(num * price);
});
简单快捷。