使用选择器" $(this).find()" jQuery里面有一个javascript函数

时间:2016-04-14 16:46:24

标签: javascript jquery html

我使用的是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 ..."在一个函数内部应该是我认为的问题,你们可以帮忙解决这个问题吗?

由于

3 个答案:

答案 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);
};

请参阅How does the "this" keyword work?

答案 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);
  };