在jquery中使用每个函数外部的变量值

时间:2012-04-11 09:34:48

标签: jquery function each

jQuery('ol.productList li.product input[name*="cart.pAsin."]').load().each(function(){   // each function 
    var asinId = jQuery(this).val();
    var pUrl    = jQuery(this).siblings("a").attr('href');
    var imgPath = jQuery(this).siblings("a").children('img').attr('src');
    var productTitle = jQuery(this).siblings("div.productDetails").children('h4.title').text();
    var descUrl = '/api/product/asin/' + asinId;
    var productDesc = '';
        jQuery.getJSON(descUrl, function(data) {
            var attr = data.attributes[1];
            productDesc = attr.productDescription;
            var allinfo = [];
            allinfo.push(asinId,productTitle,productDesc,pUrl,imgPath);
            alert(allinfo[0]);

        });
    });

alert('Asin id :'+ asinId + ' Product Url : '+ pUrl + ' Image Path : ' +imgPath + ' Product Titl : '+productTitle+ ' Product Discription : ' +productDesc );

2 个答案:

答案 0 :(得分:1)

您无法访问asinIdpUrl等,因为它们是在您传递给each()方法的匿名函数范围内定义的。

即使您要查找的内容更加令人困惑,productDesc也可能不是您正在寻找的价值,即使您尝试在function内访问getJSONAJAX也是如此在productDesc下运行并且是异步的,这意味着在.getJSON处理程序完成后无法保证在.getJSON调用之后each()的值。

您可以从var asinId = jQuery(this).val(); var pUrl = jQuery(this).siblings("a").attr('href'); var imgPath = jQuery(this).siblings("a").children('img').attr('src'); var productTitle = jQuery(this).siblings("div.productDetails").children('h4.title').text(); var descUrl = '/api/product/asin/' + asinId; var productDesc = ''; jQuery('ol.productList li.product input[name*="cart.pAsin."]').load().each(function(){ // each function asinId = jQuery(this).val(); // notice this is without var keyword // rest of your code }); alert('Asin id :'+ asinId + ' Product Url : '+ pUrl + ' Image Path : ' +imgPath + ' Product Titl : '+productTitle+ ' Product Discription : ' +productDesc ); 方法中定义asinId等,然后它将在anon函数范围之外可用:

{{1}}

答案 1 :(得分:0)

只需在each()的匿名函数范围之外定义它们,如下所示:

var asinId = null;
var pUrl = null;
...
jQuery('ol.productList li.product input[name*="cart.pAsin."]').load().each(function(){   // each function 
    asinId = jQuery(this).val();
    pUrl    = jQuery(this).siblings("a").attr('href');
...

您现在可以从外部访问它们,因为它们现在属于全局范围。