我有<select>
个产品,当选择了一个选项后,input
#price
会自动填充data-price
,然后在输入中输入数量{{1最后在输入#quantity
中的结果来自#sum
。如何在改变输入时选择并选择?
price*quantity
&#13;
$('#product').change(function() {
var price = parseInt($(this).children("option:selected").attr("data-price"));
$("#price").attr("value", price);
});
$('#quantity').on('input propertychange paste change', function(e) {
var quantity = $('#quantity').val();
});
&#13;
答案 0 :(得分:2)
添加额外的“计算总计”功能,并从两个事件处理程序中调用它。无论何时更改,总数都会更新。
$('#product').change(function() {
var price = parseInt($(this).children("option:selected").data("price"));
$("#price").val(price);
calcTotal();
});
$('#quantity').on('input propertychange paste change', function(e) {
calcTotal();
});
function calcTotal() {
var price = $('#price').val() || 0;
var qty = $('#quantity').val() || 0;
var total = price * qty;
$('#sum').val(total);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="product">
<option value="1" data-price="100">Product 1</option>
<option value="2" data-price="200">Product 2</option>
<option value="3" data-price="300">Product 3</option>
</select>
<input type="text" id="price" value="" readonly>
<input type="number" id="quantity" min="1" max="9999999" step="1">
<input type="text" id="sum" readonly="">
答案 1 :(得分:1)
要捕获quantity
的值,您可以使用blur
方法。当用户从输入框中删除焦点时,将调用blur
函数并计算总和。
此外,您可以创建模块displaySum
方法以获取price
和quantity
输入的值并更新sum
输入。
$('#product').change(function(){
var price = parseInt($(this).children("option:selected").attr("data-price"));
$("#price").attr("value",price);
displaySum();
});
$('#quantity').on('blur', function(e) {
displaySum();
});
function displaySum() {
let price = parseInt($('#price').val());
let quantity = parseInt($('#quantity').val());
if(isNaN(price)) { price = 0; }
if(isNaN(quantity)) { quantity = 0; }
let sum = price * quantity;
$('#sum').val(sum)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="product">
<option value="1" data-price="100">Product 1</option>
<option value="2" data-price="200">Product 2</option>
<option value="3" data-price="300">Product 3</option>
</select>
<input type="text" id="price" value="" readonly>
<input type="number" id="quantity" min="1" max="9999999" step="1">
<input type="text" id="sum" readonly="">
答案 2 :(得分:0)
if ($("#quantity").val() > 0)
{
$("#sum").val(parseInt(quantity, 10) * parseInt($("#price").val(),10) );
}
添加以下行。它会将数量乘以价格并将其设置为总和输入。
$('#product').change(function(){
var price = parseInt($(this).children("option:selected").attr("data-price"));
$("#price").attr("value",price);
$("#quantity").trigger("input"); //this line will update any reflections to the change in product.
});
$('#quantity').on('input propertychange paste change', function(e) {
var quantity = $('#quantity').val();
if ($("#quantity").val() > 0)
{
$("#sum").val(parseInt(quantity, 10) * parseInt($("#price").val(),10) );
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="product">
<option value="1" data-price="100">Product 1</option>
<option value="2" data-price="200">Product 2</option>
<option value="3" data-price="300">Product 3</option>
</select>
<input type="text" id="price" value="" readonly>
<input type="number" id="quantity" min="1" max="9999999" step="1">
<input type="text" id="sum" readonly="">