来自$ .each的jquery变量范围

时间:2014-10-22 13:03:14

标签: jquery

我从jquery对这个php函数进行了这个AJAX调用 在更改select box时,我调用了数据的获取(来自php的100%) 然后我进入$.each区域将数据处理成一个列表 该列表在txt变量中生成,但其范围仅适用于$.each块。

如何将其传递回外部(第二console.log(txt);

$('#selectMain').on('change', function(){
    var txt = '';
    var argument = $('#selectMain').val();
    $.ajax({
        type: 'POST',
        url: './inc/ListManagerScripts.php?argument='+argument,
        success: function(json){
            var countries = [];
            var countries_uuid = [];

            data = $.parseJSON(json);

            $.each(data, function(key, value) {

                //append countries
                if($.inArray( value.country_uuid, countries_uuid ) == -1 ){
                    countries.push(value.country);
                    countries_uuid.push(value.country_uuid);
                    var txt = txt + addCountry(value.country, value.country_uuid);
                }

                console.log(txt);
            });
            console.log(txt);

        }
    });



    var addCountry = function(country, uuid){
        var snip = '';
        snip = snip + "<div class='expandListHeader'>";
        snip = snip + "<div class='expandListHeaderRow' ctryID='"+uuid+"'>"+country+"</div>";
        snip = snip + "</div>"
        snip = snip + "<div class='expandListContent'>";
        snip = snip + "<div class='expandListContentRow contentCol2'>";
        snip = snip + "</div>";
        snip = snip + "</div>";
        return snip;

    }


});

3 个答案:

答案 0 :(得分:7)

更改

var txt = txt + addCountry(value.country, value.country_uuid);

txt = txt + addCountry(value.country, value.country_uuid);

你正在重新声明$ .each回调范围内的变量,所以如果你取出声明,你将使用在on回调中声明的声明。

编辑:

Relevant Reading

答案 1 :(得分:2)

在函数前声明var txt;

在函数内部,使用txt = ...而非var txt = ...

然后重复使用相同的变量。

答案 2 :(得分:0)

因为你已经在$ .each块中声明了var txt,所以它的范围在该块内。

  

要使$ .each块之外的txt更改为

var txt;         
$.each(data, function(key, value) {

                //append countries
                if($.inArray( value.country_uuid, countries_uuid ) == -1 ){
                    countries.push(value.country);
                    countries_uuid.push(value.country_uuid);
                     txt = txt + addCountry(value.country, value.country_uuid);
                }

                console.log(txt);
            });

您正在$ .each函数中重新声明txt变量。 如果你想要它用于所有数组元素,那么你可以使用另一个数组。