0

我正在尝试在函数之外使用变量。

我已经在函数之前定义了变量,但是当我尝试输出它时得到一个 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。我正在尝试使用 element 输出它#totalplus

4

2 回答 2

2

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

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

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

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

于 2013-08-28T21:01:59.013 回答
1

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

您必须像这样在最后一行中使用 total.val() 值:

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

然后您可以在两个幻灯片事件的末尾添加同一行。

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

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

于 2013-08-28T21:12:09.627 回答