【问题标题】:alert variable outside the scope in jqueryjquery范围之外的警报变量
【发布时间】:2017-06-19 19:57:24
【问题描述】:

我对这个论坛和 jquery 也比较陌生。因此,如果我的问题是错误的,请不要标记否定。

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

我正在使用更改功能来获取更新的未输入值,如下所示,它工作得非常好。我还可以在如下所述的范围内使用更新的值来提醒变量。

$(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);
});

【问题讨论】:

  • 尝试在ready(function(){之后添加var myVar = "";
  • 我在发布这个问题之前尝试过这个,但它不起作用。你能帮忙发布一个解决方案是 JSfiddle 吗?对我有很大帮助

标签: jquery


【解决方案1】:

如果你试图在范围之外提醒它,它会变成空白,因为它会在页面加载时触发

相反,我认为您想在某个事件侦听器中调用它,因为这就是您尝试将其分配给它之外的变量的原因

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

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

【讨论】:

  • 那么如何调用另一个事件监听器呢?你能提供更新的代码吗?
  • 这取决于您何时要提醒该值
  • 更改后的值需要在 API url 中更新,以便 JSON 输出。除非我们在不刷新页面的情况下自动获取更改值,否则这是不可能的。为了使用 url 中的更改值进行更新,我需要范围之外的更改值才能在另一个函数或事件侦听器中使用。
  • @NewsO.Jake 是的,我明白你面临的问题是什么。建议的解决方案应该可行。
【解决方案2】:

您需要将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();

【讨论】:

  • 但是 window.myVar 如何返回范围之外的值呢?请解释
  • 因为window.myVar 存储在本地范围之外和全局范围内。它可以通过窗口中任何位置的代码访问。话虽如此,全局变量并不理想,所以请发布需要使用 myVar 的代码,我可以告诉你如何访问它。
  • @John Wu:我希望将更改后的值连接到 JSON 输出的 url。示例:example.com/…
  • 我尝试了您的更新,但它返回未定义的语句。你能帮忙做一个小提琴演示或任何工作示例吗?这将是最有帮助的。
猜你喜欢
  • 2016-01-05
  • 2011-12-06
  • 2011-07-03
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多