这让我发疯,我不知道造成这个问题的原因。我有两个数组,一个列出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);
});
}
答案 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]));