0

我有一个页面,其中包含许多滑块,允许用户在两​​个范围之间选择一个值。每当滑块移动时,数字都会更新等,并显示一个新数字。

为了扩展这一点,我想添加一个自由文本字段,用户可以在其中输入然后从总数中减去的数字。

我有以下代码,但不知道如何将变量传递给现有的 javascript,如果我只使用费用金额,则不会显示任何内容。

<script type="text/javascript">
$(document).ready(function() {
$("#expense").change(function(){
var expenseamount = $(this).val(); 
});
});
</script>

感谢您到目前为止的帮助,但仍然没有发生任何事情 - 我的完整脚本现在如下:

<script> 
$( ".slider" ).slider({
range: "min",
value: 50,
min:10,
max: 100,
step: 10,
slide: function( event, ui ) {
$( "#slider-result" ).html( ui.value );
},
});

var amount= $( ".slider" ).slider( "value" );

var expenseamount;
$(document).ready(function() {
$("#expense").change(function(){
expenseamount = $(this).val(); 
});
});

amount2 = amount - expenseamount;
$("#total" ).text(amount2);

</script> 
4

3 回答 3

1

expenseamount最简单的答案是在使用之前声明为全局变量。然后它将可用于您项目中的所有脚本。在处理程序中声明它.ready()使其成为该处理程序函数中的局部变量,因此它在项目的其他地方不可用。以下是您将其声明为全局变量的方式:

script type="text/javascript">

var expenseamount;

$(document).ready(function() {
    $("#expense").change(function(){
        expenseamount = $(this).val(); 
    });
});
</script>

通常最好添加尽可能少的全局变量,因为它们可能会相互冲突。如果您只想拥有一个像这样的全局应用程序,或者它是一个非常简单的应用程序,那么上述技术就可以了。

另一方面,如果您的应用程序非常大,并且可能是其他人正在为其贡献代码的更大项目的一部分,那么您可能希望采取措施避免全局变量冲突。在这种情况下,您将创建一个顶级全局变量并在其上添加这样的项目作为属性:

script type="text/javascript">

// make sure myAppGlobals is defined as an object
// but if it has already been defined, don't overwrite it
var myAppGlobals = myAppGlobals || {};

$(document).ready(function() {
    $("#expense").change(function(){
        myAppGlobals.expenseamount = $(this).val(); 
    });
});
</script>
于 2012-09-17T17:41:47.097 回答
0

好吧,你可以取出var,它会成为expenseamount一个全局变量。但是当涉及到正确的编码实践时,这将是可怕的。

我建议您创建某种对象来保存这样的常见数据并使其成为全局对象。可能还想添加一些简单的命名空间:

var AppData = AppData || {};

AppData.expenseAmount = 0;

//...

$(doument).ready(function () {
    $("#expense").change(function(){
        AppData.expenseAmount = $(this).val(); 
    });
});

//...

function someOtherFunction() {
    alert(AppData.expenseAmount); //you get the point.
}

PS - 这是一种“应该在任何地方工作”的修复方法。你应该考虑你的具体情况和 JavaScript 的能力来做一些很棒的事情(比如闭包),以将可用性限制在expenseAmount需要的地方。所以,澄清一下,这不是最好的解决方案,它是我可以提供的最好的解决方案,而无需更多地了解您的代码结构。你应该努力改进它。

于 2012-09-17T17:40:27.797 回答
0

Javascript 具有函数作用域,这意味着函数中定义的变量仅在这些函数中可用。因此,请在您希望它存在的范围内声明变量,即全局范围。

var expenseamount;

$(document).ready(function() {
  $("#expense").change(function(){
    expenseamount = $(this).val(); 
  });
});

// expenseamount can now be used from anywhere
于 2012-09-17T17:41:44.980 回答