Jquery:如何获取变量局部外部函数?

时间:2013-12-12 15:37:37

标签: javascript jquery

我有一个小问题,如何取变量“j”并将其打印在函数外部。 变量“j”位于for循环中,用于计算输入的数量,我想在整个函数之外取这个变量。请帮忙

$(function () {
    var scntDiv = $('#p_scents');
    var i = $('#p_scents p').size() + 1;

    if (i == i) {
        document.getElementById("counter").innerHTML = 1;
    }
    $('#addScnt').live('click', function korzen() {
            $('<p><label for="p_scnts"><input type="text" id="p_scnt' + i + '" size="20" name="p_scnt_' + i + '" value="" placeholder="id' + i + '" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
            i++;

            for (var j = 1; j < i; j++) {
                //-----"j" this varible otuside function
            }
            return false;

        }
    );

    $('#remScnt').live('click', function () {
        if (i > 2) {
            $(this).parents('p').remove();
            i--;

            for (var j = i; j >= i; j--) {
                document.getElementById("distance_road").innerHTML = j - 1;
            };

        }
        return false;
    });
});

document.getElementById("counter").innerHTML = j;

2 个答案:

答案 0 :(得分:0)

我在您的代码中做了一些更改......

var j = 0;

$(function () {
    var scntDiv = $('#p_scents');
    var i = $('#p_scents p').size() + 1;

    if (i == i) {
        document.getElementById("counter").innerHTML = 1;
    }
    $('#addScnt').live('click', function korzen() {
            $('<p><label for="p_scnts"><input type="text" id="p_scnt' + i + '" size="20" name="p_scnt_' + i + '" value="" placeholder="id' + i + '" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
            i++;

            for (j = 1; j < i; j++) {
                //-----"j" this varible otuside function
            }
            return false;

        }
    );

    $('#remScnt').live('click', function () {
        if (i > 2) {
            $(this).parents('p').remove();
            i--;

            for (j = i; j >= i; j--) {
                document.getElementById("distance_road").innerHTML = j - 1;
            };

        }
        return false;
    });
});

document.getElementById("counter").innerHTML = j;

答案 1 :(得分:0)

你拥有的原型:

(function() {
    for(var i=0; i<10;i++) {
    console.log(i);
}
})();
console.log("i: "+i);

导致:Uncaught ReferenceError: i is not defined

删除for循环中的var,你有一个全局变量:

(function() {
    for(i=0; i<10;i++) {
    console.log(i);
}
})();
console.log("i: "+i);

也在这里查看: http://jsfiddle.net/7t8Xy/

附加说明:

  • 使用全局变量时,请在变量上使用前缀。其他一些代码也使用j作为变量名的可能性很大。我试图阻止全局变量。但是如果我必须使用项目名称或公司名称之类的前缀。在你的情况下,可能只是my_j
  • 为全局变量使用一个好名称。 for循环中的ij是可以的。但作为一个全球变量,它并不好。远离这个for循环的2000行没有人知道j代表什么。使用描述变量的名称。在你的情况下 - 我不确定j代表什么,它只是一个猜测 - 也许my_maxDistanceRoad