在$(document).ready(function()之外访问jQuery变量

时间:2017-05-04 20:02:17

标签: javascript jquery dom

我想在脚本块之外访问jQuery变量var address。我检查了这个question,但它对我也没有用。

$(document).ready(function(){
    var url = 'https://sandbox.xyz.com/api/search/';
    $("button").click(function(){
        var address = $("#address").val();
        $.getJSON(url+address, function(result){
            $.each(result, function(index, element){
                var address = element.address;
            });
        });
    });
});

如何在我的jQuery块之外访问var address

2 个答案:

答案 0 :(得分:0)

要使变量在更高的范围内可用,您需要在该范围内声明它,并在子范围中使用它。原理:

var address,
    doStuff = function(param) {
      // param holds address, when you call it from `$.each()`
      console.log(param);
    };
$(document).ready(function(){
    var url = 'https://sandbox.xyz.com/api/search/';
    $("button").click(function(){
        address = $("#address").val();
        $.getJSON(url+address, function(result){
            $.each(result, function(index, element){
                address = element.address;
                doStuff(address);
            });
        });
    });
});

address将等同于$('#address').val()事件中的document.ready,直到来自$.getJSON()的回复。在响应之后,它将继续填充result集合中的最后一个值,因为您在每次$.each()次迭代时都会重写其值。

如果要在address返回后使用getJSON的值,则需要创建一个函数并从getJSON中调用它。更新了我的例子。

答案 1 :(得分:-1)

请试试这个

var address;

$(document).ready(function(){
    var url = 'https://sandbox.xyz.com/api/search/';
    $("button").click(function(){
    var address = $("#address").val();
        $.getJSON(url+address, function(result){
            $.each(result, function(index, element){
                address = element.address;
            });
        });
    });
});

在代码的最开头声明一个变量将使其范围对于所有下面的代码和函数都是全局的。