如何使此功能可重用?
How do I make this function reusable?
如何通过传递 2 个参数 totalPrice 和 currentPrice 使此函数可重用。
这是代码(它工作得很好,但我希望它在一个单独的函数中,这样我以后可以使用它):
$(".btn-quantity").on('click', function () {
var $button = $(this);
var oldValue = $button.parent().find("input").val();
var totalPrice = document.querySelector(".table-price-total"); // I need this querySelector to be the function's first argument
var currentPrice = document.querySelector(".table-price-current"); // And this the second argument
var newVal = parseFloat(oldValue);
if ($button.hasClass("btn-quantity--plus")) {
newVal++;
} else {
if (newVal - 1 > 0) {
newVal--;
}
}
let result = newVal * parseFloat(currentPrice.innerHTML);
totalPrice.innerHTML = result.toFixed(2);
$button.parent().find("input").val(newVal);
})
我目前得到的错误是:Uncaugh TypeError: $btn.parent is not a function
这是我试过的:
let $btn = document.querySelector(".btn-quantity");
let btnFunc = (currentPrice, totalPrice) => {
$btn = document.querySelector(".btn-quantity");
let oldValue = $btn.parent().find("input").val();
let cPrice = document.querySelector(currentPrice);
let tPrice = document.querySelector(totalPrice);
let newVal = parseFloat(oldValue);
if ($btn.hasClass("btn-quantity--plus")) {
newVal++;
} else {
if (newVal - 1 > 0) {
newVal--;
}
}
let result = newVal * parseFloat(cPrice.innerHTML);
tPrice.innerHTML = result.toFixed(2);
$btn.parent().find("input").val(newVal);
}
$btn.addEventListener('click', (event) => {
event.preventDefault();
btnFunc(".table-price-current", ".table-price-total");
})
通常你会通过使用一个函数来实现其他功能:
function makePriceCalculator(totalPrice, currentPrice) {
return function() {
var $button = $(this);
var oldValue = $button.parent().find("input").val();
var newVal = parseFloat(oldValue);
if ($button.hasClass("btn-quantity--plus")) {
newVal++;
} else {
if (newVal - 1 > 0) {
newVal--;
}
}
let result = newVal * parseFloat(currentPrice.innerHTML);
totalPrice.innerHTML = result.toFixed(2);
$button.parent().find("input").val(newVal);
};
}
那么您发布的示例将写成
$(".btn-quantity").on('click', makePriceCalculator(document.querySelector(".table-price-total"), document.querySelector(".table-price-current"));
如何通过传递 2 个参数 totalPrice 和 currentPrice 使此函数可重用。
这是代码(它工作得很好,但我希望它在一个单独的函数中,这样我以后可以使用它):
$(".btn-quantity").on('click', function () {
var $button = $(this);
var oldValue = $button.parent().find("input").val();
var totalPrice = document.querySelector(".table-price-total"); // I need this querySelector to be the function's first argument
var currentPrice = document.querySelector(".table-price-current"); // And this the second argument
var newVal = parseFloat(oldValue);
if ($button.hasClass("btn-quantity--plus")) {
newVal++;
} else {
if (newVal - 1 > 0) {
newVal--;
}
}
let result = newVal * parseFloat(currentPrice.innerHTML);
totalPrice.innerHTML = result.toFixed(2);
$button.parent().find("input").val(newVal);
})
我目前得到的错误是:Uncaugh TypeError: $btn.parent is not a function
这是我试过的:
let $btn = document.querySelector(".btn-quantity");
let btnFunc = (currentPrice, totalPrice) => {
$btn = document.querySelector(".btn-quantity");
let oldValue = $btn.parent().find("input").val();
let cPrice = document.querySelector(currentPrice);
let tPrice = document.querySelector(totalPrice);
let newVal = parseFloat(oldValue);
if ($btn.hasClass("btn-quantity--plus")) {
newVal++;
} else {
if (newVal - 1 > 0) {
newVal--;
}
}
let result = newVal * parseFloat(cPrice.innerHTML);
tPrice.innerHTML = result.toFixed(2);
$btn.parent().find("input").val(newVal);
}
$btn.addEventListener('click', (event) => {
event.preventDefault();
btnFunc(".table-price-current", ".table-price-total");
})
通常你会通过使用一个函数来实现其他功能:
function makePriceCalculator(totalPrice, currentPrice) {
return function() {
var $button = $(this);
var oldValue = $button.parent().find("input").val();
var newVal = parseFloat(oldValue);
if ($button.hasClass("btn-quantity--plus")) {
newVal++;
} else {
if (newVal - 1 > 0) {
newVal--;
}
}
let result = newVal * parseFloat(currentPrice.innerHTML);
totalPrice.innerHTML = result.toFixed(2);
$button.parent().find("input").val(newVal);
};
}
那么您发布的示例将写成
$(".btn-quantity").on('click', makePriceCalculator(document.querySelector(".table-price-total"), document.querySelector(".table-price-current"));