0

これは私を夢中にさせており、何が問題の原因なのかわかりません。2 つの配列があります。1 つは pageID をリストし、もう 1 つはページをリストします。

次のコードを使用しようとすると、「ページ」は常に「フロント」を返します。変数 "var newObject" を宣言する前に for ループ中にアラートを設定すると、出力は正しく、ページには "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);
        });
    }
4

1 に答える 1

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]));
于 2012-11-08T08:35:03.613 に答える