我使用的是jQuery,这是我的任何标签点击事件的代码。
$('.spin span:last-child').click(function(){
unitPrice = parseFloat($(this).closest('.product').find('.unit-price span').text().substring(3));
if ( $(this).parent().find($('.custom-input')).val() == "" ) {
$(this).parent().find($('.custom-input')).val(1);
inputValue = parseInt($(this).parent().find($('.custom-input')).val());
subTotal = parseFloat(inputValue * unitPrice).toFixed(2);
$(this).closest('.product').find('.total-price span').text(subTotal);
} else if ( inputValue =! "" ) {
inputValue = parseInt($(this).parent().find($('.custom-input')).val());
inputValue += 1
$(this).parent().find($('.custom-input')).val(inputValue);
subTotal = parseFloat(inputValue * unitPrice).toFixed(2);
$(this).closest('.product').find('.total-price span').text(subTotal);
};
});
所以,我创建了一个优化代码的函数:
function getValues(){
unitPrice = parseFloat($(this).closest('.product').find('.unit-price span').text().substring(3));
subTotal = parseFloat(inputValue * unitPrice).toFixed(2);
return subTotal;
$(this).closest('.product').find('.total-price span').text(subTotal);
};
我的新块代码应如下所示:
$('.spin span:last-child').click(function(){
if ( $(this).parent().find($('.custom-input')).val() == "" ) {
$(this).parent().find($('.custom-input')).val(1);
inputValue = parseInt($(this).parent().find($('.custom-input')).val());
getValues();
} else if ( inputValue =! "" ) {
inputValue = parseInt($(this).parent().find($('.custom-input')).val());
inputValue += 1
$(this).parent().find($('.custom-input')).val(inputValue);
getValues();
};
});
但我的功能" getValues"不工作,选择器" $(this).find ..."在一个函数内部应该是我认为的问题,你们可以帮忙解决这个问题吗?
由于
答案 0 :(得分:3)
您需要将this
作为参数传递给函数:
getValues(this);
并定义如下函数:
function getValues(element){
unitPrice = parseFloat($(element).closest('.product').find('.unit-price span').text().substring(3));
subTotal = parseFloat(inputValue * unitPrice).toFixed(2);
return subTotal;
$(element).closest('.product').find('.total-price span').text(subTotal);
};
答案 1 :(得分:2)
我建议更改函数定义,以便允许将您正在使用的元素传递给它。而不是担心在this
中创建getValues
。
您的函数中也有一些错误:return
将在该函数结束时执行,因此return
之后的行当前不会运行,并且您应始终使用var
来执行声明变量。您没有使用此功能的结果,因此您根本不需要return
声明。
function getValues(spanEl) {
var unitPrice = parseFloat($(spanEl).closest('.product').find('.unit-price span').text().substring(3));
var subTotal = parseFloat(inputValue * unitPrice).toFixed(2);
$(spanEl).closest('.product').find('.total-price span').text(subTotal);
};
然后在您致电getValues()
的任何地方,将其更改为getValues(this);
。
答案 2 :(得分:1)
您正在this
功能中访问getValues
变量。但是this
在功能上不可用。你应该明确地传递这个对象。
你可以像打击一样:
function getValues(obj){
unitPrice = parseFloat($(obj).closest('.product').find('.unit-price span').text().substring(3));
subTotal = parseFloat(inputValue * unitPrice).toFixed(2);
return subTotal;
$(obj).closest('.product').find('.total-price span').text(subTotal);
};