从全局范围中删除var

时间:2014-10-30 23:26:12

标签: javascript jquery scope

在这个例子中,我有两个动作:

  1. 当您添加用户数量时 - 它将自动按输入中的总价格计算

  2. 当您已添加用户数量时>计算总和>如果您点击欧元 - 输入总金额,则金额将转换为欧元。

  3. 所以,每件事情都很好 - 但我不喜欢“usesQuantity”具有全球范围! 任何想法如何使其本地和保存工作版本 http://jsfiddle.net/gb2447jd/5/

    尝试了类似的事情:

    $('#user-quantity').keyup(function(){
        var userQuantity = parseInt($(this).val());
        if( userQuantity >=1 && userQuantity <=200){
          valid(userQuantity);
        } else {
          $('#total-sum').val("error");
        }
      });
    
    
      $('#usd').on('click', function(){
        $('#eur').removeClass('greenChacked');
        $(this).addClass('greenChacked');
        valid(userQuantity);
      });
      $('#eur').on('click', function(){
        $('#usd').removeClass('greenChacked');
        $(this).addClass('greenChacked');
        valid(userQuantity);
      });
      $('#usd').trigger('click');
    
      function valid(userQuantity){
        if( $('#usd').hasClass('greenChacked') ){
          var usdCurr = userQuantity * 10 + 'doll';
          $('#total-sum').val(usdCurr);
        }
        if( $('#eur').hasClass('greenChacked') ){
          var eurCurr = userQuantity * 5 + 'eur';
          $('#total-sum').val(eurCurr);
        }
      }
    

2 个答案:

答案 0 :(得分:1)

在函数中定义变量(userQuantity)。它可以通过闭包到其他函数和回调,而不具有全局范围。请参阅此新jsFiddle

新代码的开头如下:

$(document).ready(function () {
    var userQuantity;
    $('#user-quantity').keyup(function () {
        userQuantity = parseInt($(this).val());
        if (userQuantity >= 1 && userQuantity <= 200) {
            setCurrency();
        } else {
            $('#total-sum').val("error");
        }
    });

答案 1 :(得分:1)

您可以将代码包装在immediately invoked function

(function () {
    var userQuantity;

    $(document).ready(function () {
        //rest of your code 
    };
}());

更多信息here