2012-08-10 84 views
0

我早些时候对此代码有了一些帮助,但是我遇到了另一个问题。我如何修改每个函数中的变量并在该范围之外使用它们?
下面是我的代码的简单说明:对于每个网页,抓取元素的内容并将它们插入到数组中。在此之后,操作数组以创建消息并向浏览器发送警报。使用.each()范围内的变量

HTML

<div id="insert"></div> 

的Javascript

$(document).ready(function() { 
    userid = 17320; 
    courseid = 4745; 

    allLessonsArray = script(userid, courseid); 

    function script(userid, courseid) { 
     var lessonInTopicSectionArray = new Array(); 
     lessonInTopicSectionArray['Floods, external'] = 376; 
     var allLessonsArray = new Array(); 

     $.each(lessonInTopicSectionArray, function(name, lesson) { 
      lastAttempt = 0; 
      url = '---------/learn/mod/lesson/report.php?id=' + lesson + '&action=reportdetail&userid=' + userid + '&try=' + lastAttempt; 
      var lessonArray = new Array(); 

      $.get(url, function(data) { 
       var page = $(data);     
       $('tr.r1.lastrow td.cell.c0').html(page).each(function(index, content) { 
        score = parseInt(content.substr(content.length - 1)); 
        lessonArray[index] = score; 
       }); 

       allLessonsArray[name] = lessonArray; 
      }); 

     }); 
     return allLessonsArray; 
    } 

    var message = ""; 

    $.each(allLessonsArray, function(name, lessonArray) { 
     if (!message) { 
      message = "<li>Lesson <b>" + name + "</b> scores are:</li>"; 
     } 
     else { 
      message = message + "<li>Lesson <b>" + name + "</b> scores are:</li>"; 
     } 

     probability = lessonArray[0]; 
     humanImpact = lessonArray[1]; 
     infrastructureImpact = lessonArray[2]; 
     communityImpact = lessonArray[3]; 
     training = lessonArray[4]; 
     preparedness = lessonArray[5]; 
     message = message + "<ul><li>Probability score: " + probability + "</li><li>Human Impact score: " + humanImpact + "</li><li>Public Health Infrastructure Impact score: " + infrastructureImpact + "</li><li>Community Impact score: " + communityImpact + "</li><li>Training score: " + training + "</li><li>Preparedness score: " + preparedness + "</li></ul>"; 
     risk = (probability/3) * ((humanImpact + infrastructureImpact + communityImpact + training + preparedness)/15); 
     message = message + "<p>Risk of <b>" + name + "<b> is" + risk + ".</p>"; 

    }); 

    $('#insert').html(message); 

});​ 
+1

友好的建议:如果你希望其他人阅读你的代码,它只是礼貌正确格式化。 – 2012-08-10 20:40:49

+0

这是一个学校作业吗? – 2012-08-10 20:42:11

+0

这不是一个学校作业。 – 2012-08-10 20:47:23

回答

0

作用域似乎是正确的。

也许您的问题与$.each()不会迭代Array中具有String作为其索引的元素有关。

请尝试以下here,你只会得到一个弹出与0 -> 1

var list = new Array(); 
list['Floods, external'] = 376; 
list[0] = 1; 

$.each(list, function(index, item) { 
    alert(index + " -> " + item); 
});​ 

从jQuery的$.each()documentation页:

说明:一个通用的迭代函数,可以用于无缝遍历对象和数组。具有长度属性的数组和类似数组的对象(例如函数的参数对象)通过数字索引(从0到长度-1)迭代。其他对象通过它们的命名属性进行迭代。

可以完成与以下等价的:

var list = new Array(); 
list[0] = {name : 'Floods, external', value : 376}; 

$.each(list, function(index, item) { 
    alert(item.name + " -> " + item.value); 
});​ 
0

您需要定义范围之外的变量。

var myvar = []; 
$.each(
// stuff happens to myvar 
) 
+0

我已经这样做了: allLessonsArray, lessonArray, 消息。有没有我错过的东西? – 2012-08-10 20:48:55