变量在javascript中突然切换到未定义

我标记了第三个 console.log - “console.log(elements[i])”。在这一点上,elements[i] 是未定义的,但在此之前它的行为符合预期。任何想法如何/为什么会发生这种情况?


function get_all_tasks_within_div(div_id) {

  var options = []

  var checked_options = []

  var elements = document.getElementById(div_id).querySelectorAll('*');

  for (i = 0; i < elements.length; i++) {

    if (elements[i].getAttribute("name") == "task") {

      options.push(elements[i].value)

      if (elements[i].checked == true) {

        checked_options.push(elements[i].value)

      }

    }

  }

  return [options, checked_options]

}


function create_exhibits_list(deliverable_id) {

  exhibits[deliverable_id] = []

  var elements = document.getElementsByName("exhibit")

  //get all exibits and sort

  for (i = 0; i < elements.length; i++) {

    try {

      console.log(elements[i])

      var element_id = elements[i].id;

      var exhibit_number = document.getElementById(element_id + "exhibit_number").value;

      var exhibit_name = document.getElementById(element_id + "exhibit_name").value;

      var responsible_party = document.getElementById(element_id + "responsible_party").value;

      var deliverable_type = document.getElementById(element_id + "type").value;

      var deliverable_type_options = Array.apply(null, document.getElementById(element_id + "type").options).map(function(el) {

        return el.value;

      });

      var responsible_party_options = Array.apply(null, document.getElementById(element_id + "responsible_party").options).map(function(el) {

        return el.value;

      });


手掌心
浏览 133回答 1
1回答

慕村9548890

您可以使用全局变量i的两种功能,所以for回路中get_all_tasks_within_div()变化的变量i中create_exhibits_list()。所以当你使用elements[i]调用该函数后,i已经变成了elements数组中不存在的索引。你应该总是把变量定义成与本地var或let除非您特别需要使用全局变量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript