除非我有警报,否则Jquery变量无法获取正确的值

时间:2012-11-08 08:32:25

标签: javascript jquery

这让我发疯,我不知道造成这个问题的原因。我有两个数组,一个列出pageID,另一个列出页面。

当我尝试使用以下代码时,“页面”总是发送回'front'。如果我在for循环期间发出警报,然后声明变量“var newObject”,则输出正确,页面显示“front,insideLeft,insideRight and back”。

正确输出所有其他属性。

请在下面找到我的代码:

    var pageID = ["cardFront","cardInsideL","cardInsideR","cardBack"];
    var pages = ["front","insideLeft","insideRight","back"];

    for (var i=0; i<pageID.length; i++) {
        var cfTextarea = $('#' + pageID[i] + ' textarea'); //array of textareas

        //Get each textarea properties and encode to json
        $("#" + pageID[i] + " textarea").each(function(){

        var txtOffset = $(this).offset();
        var divOffset = $("#" + pageID[i]).offset();

        var newObject = { 
            'page'      : pages[i],
            'id'        : $(this).attr('id'),
            'src'       : $(this).attr('src'),
            'width'     : $(this).width(),
            'height'    : $(this).height(),
            'top'       : txtOffset.top - divOffset.top,
            'left'      : txtOffset.left - divOffset.left,
            'rotation'  : '0',
            'colour'    : $(this).css("color"),
            'size'      : $(this).css("font-size"),
            'bold'      : $(this).css("font-weight"),
            'underline' : $(this).css("text-decoration"),
            'align'     : $(this).css("text-align"),
            'font'      : $(this).css("font-family"),
            'text'      : $(this).val() 
        };
        data.textareas.push(newObject);
        });
    }

1 个答案:

答案 0 :(得分:3)

问题是您传递给each的功能只能获得i=0

你可以解决这个问题(未经测试,但这是标准方法):

function mk_add_text_area(data, page_id, page) {
    return function(elem) {
        var txtOffset = $(elem).offset();
        var divOffset = $("#" + page_id).offset();

        var newObject = { 
            'page'      : page,
            'id'        : $(elem).attr('id'),
            'src'       : $(elem).attr('src'),
            'width'     : $(elem).width(),
            'height'    : $(elem).height(),
            'top'       : txtOffset.top - divOffset.top,
            'left'      : txtOffset.left - divOffset.left,
            'rotation'  : '0',
            'colour'    : $(elem).css("color"),
            'size'      : $(elem).css("font-size"),
            'bold'      : $(elem).css("font-weight"),
            'underline' : $(elem).css("text-decoration"),
            'align'     : $(elem).css("text-align"),
            'font'      : $(elem).css("font-family"),
            'text'      : $(elem).val() 
        };
        data.textareas.push(newObject);
    }
}

然后在......

    //Get each textarea properties and encode to json
    $("#" + pageID[i] + " textarea").each(mk_add_text_area(data, pageID[i], pages[i]));