为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2021-12-02 16:49:25
我标记了第三个 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;      });
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

您可以使用全局变量i的两种功能,所以for回路中get_all_tasks_within_div()变化的变量icreate_exhibits_list()。所以当你使用elements[i]调用该函数后,i已经变成了elements数组中不存在的索引。

你应该总是把变量定义成与本地varlet除非您特别需要使用全局变量。


查看完整回答
反对 回复 2021-12-02
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信