jquery范围之外的警报变量

时间:2017-06-19 19:57:24

标签: jquery

我对这个论坛和jquery也相对较新。如果我的问题是错误的,请求不要标记negetive incase。

我曾尝试搜索,但仍然无法为我的问题找到合适的解决方案。

我正在使用更改功能获取更新的输出值,如下所示,这非常正常。我还能够使用下面提到的范围内的更新值来警告变量。

$(document).ready(function(){
   $("#tags").on("keyup", function() {
    var myVar = $(this).val();
    alert(myVar);
  });
});

现在我想提醒范围之外的变量myVar,如下所示,这不起作用,我不知道如何从给定范围内调用此变量。请帮忙。

$(document).ready(function(){
   $("#tags").on("keyup", function() {
    var myVar = $(this).val();
  });
  alert(myVar);
});

2 个答案:

答案 0 :(得分:0)

如果您尝试在范围之外提醒它,它将变为空白,因为它将在页面加载时触发

相反,我认为你想在一些事件监听器中调用它,因为这就是你试图将它分配给它之外的变量的原因

$(document).ready(function(){ 
    var myVar = '';
    $("#tags").keyup(function() {
        myVar = $(this).val();
        alert(myVar);
    });

    //or another event listener {
        alert(myVar);
    });
});

答案 1 :(得分:0)

您需要将myVar存储在可以由调用alert的函数读取的范围内。大锤方法是将myVar置于全局范围内,如下所示:

$(document).ready(function(){
   $("#tags").on("keyup", function() {
       myVar = $(this).val();  //notice no var keyword
   });
});

当使用变量而不用var声明它时,它最终会在全局范围内 - 从技术上讲,它成为当前窗口的属性。如果你想要明确,你可以把它写成

$(document).ready(function(){
   $("#tags").on("keyup", function() {
       window.myVar = $(this).val();  //notice no var keyword
   });
});

现在一般来说,你应该避免全局范围的变量,因为你永远不知道你可能会踩到哪个变量,例如:如果它与另一个变量同名。因此,更好的解决方案是将变量放在closure中。它的外观取决于您声明调用alert的函数的确切位置。

我们假设您要引入一个新的全局函数ShowAlert。您可以使用公共变量在同一代码块中定义它,这会将变量提升到局部范围之外并进入闭包,如下所示:

$(document).ready(function(){
   var myVar;  //We use the var keyword to declare this in local scope, for now

   $("#tags").on("keyup", function() {
       myVar = $(this).val(); 
   });

   ShowAlert = function() {
       alert(myVar);  //Using myVar here forces it into a closure, which will persist even after document.ready has exited
   }
});

然后,要使用myVar的最新值显示提醒,请使用:

ShowAlert();