在jquery中使用函数外部的变量

时间:2013-08-28 20:58:11

标签: jquery

我试图在函数外部使用变量。

我已经在函数之前定义了变量,但是当我尝试输出它时,我得到一个NaN(变量是一个值)。

以下是我的代码,这是jsfiddle

$(function() {

    // inital values
    var total = $("#total").val("0");

    // slider A  
    $( "#pricea" ).slider({
      value:0,
      min: 0,
      max: 500,
      step: 50,
      slide: function(event, ui) {                 
          $("#pricea").val(ui.value);                             
          var aaa = $("#pricea").val();  
          var bbb = $("#priceb").val();
          var total = $("#total").val(+aaa + +bbb);            
      }        
    });

    // slider B
    $( "#priceb" ).slider({
      value:0,
      min: 0,
      max: 500,
      step: 50,
      slide: function(event, ui) {                 
          $("#pricea").val(ui.value);                             
          var aaa = $("#pricea").val();  
          var bbb = $("#priceb").val();  
          var total = $("#total").val(+aaa + +bbb);
      }        
    });

   $("#totalplus").val(+total + 10);


  });

变量是var total。我试图用元素#totalplus输出它。

2 个答案:

答案 0 :(得分:2)

您必须了解,通过使用var关键字,您将两个幻灯片函数范围内的变量total重新定义为局部变量。设置变量值不会对这些函数之外的外部范围变量total产生任何影响。

如果省略函数内的var关键字,则应该可以访问函数之外的值。

但是:回调函数具有异步性质,因此最后一行代码很可能会在回调内的值发生变化之前执行。

解决方案:您想要对total的更改值执行的操作必须在回调内部完成(包括输出值)。

答案 1 :(得分:1)

你的总变量包含一个jquery对象,而不是值本身,因此它不是一个数字。

你必须在最后一行使用total.val()值,如下所示:

$("#totalplus").val(parseInt(total.val()) + 10);

然后您可以在两个幻灯片事件结束时添加相同的行。

此外,正如devnull69所述,您不必重新定义总变量。

这是一个更新的jsfiddle:http://jsfiddle.net/8R7NW/1/