我有一个简单的jquery计算器:
<p class="price" data-base-price="50">$<span>80</span></p>
<select name="s1" class="price-option">
<option value="1" data-price="10">Item 1</option>
<option value="2" data-price="20">Item 2</option>
</select>
<select name="s2" class="price-option">
<option value="1" data-price="30">Item 3</option>
<option value="2" data-price="40">Item 4</option>
</select>
<input type="text" name="price-option-input" id="price-option-input">
使用Javascript:
$(document).ready(function () {
$('.price-option').change(function(){
var price = parseInt($('.price').data('base-price'));
$('.price-option').each(function(i, el) {
price += parseInt($('option:selected', el).data('price'));
});
price += parseInt($('#price-option-input').val());
$('.price span').text(price);
});
});
这个计算器正在运行,但问题是当我为文本输入输入值时price
中的结果没有动态更新(我需要在选择器中选择另一个选项来进行结果更新)
答案 0 :(得分:3)
您必须添加keyUp事件
calculate = function(){
var price = parseInt($('.price').data('base-price'));
$('.price-option').each(function(i, el) {
price += parseInt($('option:selected', el).data('price'));
});
price += parseInt($('#price-option-input').val());
$('.price span').text(price);
}
$(document).ready(function () {
$('#price-option-input', .price-option').change(calculate);
$('#price-option-input', .price-option').keyup(calculate);
});
我认为值得解释的是,当您取消选择输入时会触发更改事件,或者在使用向上/向下按钮时以数字类型触发。
答案 1 :(得分:0)
您可以添加一个按钮来执行计算,触发更改事件。
示例:
$("button").on("click", function() {
$('.price-option').trigger("change");
});
或者,您可以从输入中按下键盘事件,然后按回车键,进行计算。问题是:你什么时候想做计算?有了答案,请听取正确的事件并进行计算。
答案 2 :(得分:0)
我相信您只需要使用.html
因为这将设置内部HTML:
$('.price span').html(price);
为了将来参考,像这样的多选择器并不像这样的效率接近:
$('.price').find('span').html(price);
答案 3 :(得分:0)
我已修复您的代码,现在可以正常使用http://plnkr.co/edit/pWSEimrKkA200jQK9w5a?p=preview
HTML:
<p class="price" data-base-price="50">$<span>80</span></p>
<select name="s1" class="price-option">
<option value="1" data-price="10">Item 1</option>
<option value="2" data-price="20">Item 2</option>
</select>
<select name="s2" class="price-option">
<option value="1" data-price="30">Item 3</option>
<option value="2" data-price="40">Item 4</option>
</select>
<input type="text" name="price-option-input" id="price-option-input" onchange='updatePrice()'>
JS:
function updatePrice(){
var price = parseInt($('.price').data('base-price'));
console.log(price);
$('.price-option').each(function(i, el) {
price += parseInt($('option:selected', el).data('price'));
});
price += parseInt($('#price-option-input').val());
$('.price span').text(price);
}