2012-11-08 2 views
0

이것은 나를 미치게 만들며 문제의 원인을 잘 모릅니다. 두 개의 배열이 있습니다. 하나는 pageID를 나열하고 다른 하나는 페이지를 나열합니다.경고가 없으면 Jquery 변수가 올바른 값을 가져 오지 않습니다.

다음 코드를 사용하면 '페이지'는 항상 '앞'을 보냅니다. 변수 "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); 
     }); 
    } 
+1

이 경쟁 조건 – alexandernst

+0

같은 소리 이는 범위 지정 문제이며 함수가 각각에 전달 된 사실은 루프 수명 시간에 한 번만 컴파일됩니다. –

+0

도움 주셔서 감사합니다. 함수에 변수를 추가하여 코드를 수정했습니다. 즉, $ ("#"+ pageID [i] + "textarea")) 각각의 (function (value) {...}이 문제가 해결 된 것 같습니다. 당신이 "각자"가 오직 i = 0을 얻는다 고 언급하지 않았다면 이것을 알아 냈습니다. – jmgibbo

답변

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])); 
+0

훌륭한 설명을 해주셔서 감사합니다. '각각'은 제 코드에서 다른 문제를 일으켰습니다. . – jmgibbo

관련 문제