Я создал форму заказа с несколькими строками и столбцами Product_id Qty price
Количество и цена автоматически заполняются при выборе Product
в выпадающем списке.
В конце формы у меня есть поле, которое болело общей суммой <span id="total"></span>
Я сделал код ниже, чтобы рассчитать общую сумму заказа, но он не работает, когда qty
и price
автоматически заполняются. Он работает, если я qty
или price
jQuery(function($) {
$(".qty, .price").change(function() {
var total = 0;
$(".qty").each(function() {
var self = $(this),
price = self.next(".price"),
subtotal = parseInt(self.val(), 10) * parseFloat(price.val(), 10);
total += (subtotal || 0);
});
$("#total").text(total);
});
});
Я не знаю, правильно ли это, но вы пробовали использовать documnt.load()? вы можете поместить код в функцию, которую вы вызываете при загрузке страницы, и когда значение поля изменилось.
Вам просто нужно отделить ваш код от новой функции, например:
var calculate = function() {
var total = 0;
$(".qty").each(function() {
var self = $(this),
price = self.next(".price"),
subtotal = parseInt(self.val(), 10) * parseFloat(price.val(), 10);
total += (subtotal || 0);
});
$("#total").text(total);
};
$(".qty, .price").change(calculate);
Затем назовите его, когда захотите.
Вы можете использовать .trigger('change')
или .change()
при изменении значения текстового .change()
из кода:
$(".qty, .price").trigger('change');
или
$(".qty, .price").change();
Например:
$(".qty").val('30').change();
Попробуйте вызвать функцию на загрузке страницы и сделать это следующим образом.
$( document ).ready(function() {
YourFunction();
YourFunction() function{
// insert your code
}
});
Тогда вы можете сказать
$(".qty, .price").change(function() {
YourFunction();
}
function caltotal() { var total = 0; $(".qty").each(function() { var self = $(this), price = self.next(".price"), subtotal = parseInt(self.val(), 10) * parseFloat(price.val(), 10); total += (subtotal || 0); }); $("#total").text(total); }