[英]Variable is suddenly switching to undefined in javascript
I marked the third console.log - "console.log(elements[i])".我标记了第三个console.log - “console.log(elements[i])”。 At that point, elements[i] is undefined, but before then it behaves as expected.
那时,elements[i] 是未定义的,但在此之前它的行为与预期一样。 Any ideas how/why this is happening?
任何想法如何/为什么会发生这种情况?
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;
});
console.log(elements[i])
var task_data = get_all_tasks_within_div(element_id + "tasks");
console.log(elements[i]) // *****
var task_options = task_data[0]
var task_checked_options = task_data[1]
exhibits[deliverable_id].push({
'exhibit_number': exhibit_number,
'exhibit_name': exhibit_name,
'responsible_party': responsible_party,
'deliverable_type': deliverable_type,
'deliverable_type_options': deliverable_type_options,
'responsible_party_options': responsible_party_options,
'task_options': task_options,
'task_checked_options': task_checked_options,
'exhibit_id': element_id,
'exhibit_int': parseInt(element_id.replace(deliverable_id + "exhibit", ""), 10)
})
} catch (err) {
console.log(err)
}
}
You use the global variable i
in both functions, so the for
loop in get_all_tasks_within_div()
changes the variable i
in create_exhibits_list()
.您在两个函数中都使用了全局变量
i
,因此get_all_tasks_within_div()
中的for
循环更改了create_exhibits_list()
中的变量i
。 So when you use elements[i]
after calling the function, i
has changed to a nonexistent index in the elements
array.因此,当您在调用 function 后使用
elements[i]
时, i
已更改为elements
数组中不存在的索引。
You should always declare variables to be local with var
or let
unless you specifically need to use a global variable.除非您特别需要使用全局变量,否则您应该始终使用
var
或let
将变量声明为局部变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.