我怎样才能在JQuery函数中定义一个值然后调用另一个函数并使用该值?

时间:2016-05-18 15:54:14

标签: javascript jquery

例如,我有函数isPercentage,它使用在调用isPercentage的任何函数中定义的值:

isPercentage=function(){
        if (value<1){
            value=value*100;
            console.log(value);             
            $(this).val(value);
        }else if(value>100){
            value=value/100;
            $(this).val(value);
        }       
}



$("#userDiscount").change(function(){
        var value=$(this).val();
        isPercentage(); 
});

但是,当$(“#userDiscount”)发生更改时,我收到“未定义值”错误。如何以这样的方式定义“值”,即isPercentage()然后可以选择它。

谢谢!

2 个答案:

答案 0 :(得分:4)

当你调用一个函数时,它会在自己的上下文中执行。这意味着,当调用isPercentage()时,内部的this 不同 ,而不是该函数之外。

isPercentage()不知道value是什么(因为它超出范围)而且this不是您认为的那样。你需要告诉那个函数这些值是什么。

首先,您应将value作为参数传递给isPercentage,以便它可以使用该值。其次,您应该返回一个值,以便设置$(this).val()

var isPercentage = function(value){
    if (value<1){
        value = value*100;
    } else if(value>100){
        value = value/100;
    }       
    return value;
};

$("#userDiscount").change(function(){
    var value = $(this).val();
    value = isPercentage(value);
    $(this).val(value);
});

答案 1 :(得分:0)

我可能会通过捕获函数内部的实际元素来与Rocket略有不同。我可能会更改函数的名称,以便在此上下文中有意义。

function processValue(e) {
  var element = e.currentTarget;
  var value = $(element).val();
  if (value < 1) {
    value = value * 100;
    $(element).val(value);
  } else if (value > 100) {
    value = value / 100;
    $(element).val(value);
  }
}

$("#userDiscount").on('change', processValue);

DEMO