简体   繁体   English

增量变量在我的函数中不起作用

[英]Incremental variable doesn't work in my function

So i work with custom CMS and I need to modify a menu. 因此,我使用自定义CMS,并且需要修改菜单。 I need to add element with onclick after every item in menu which would unpack child ul element to show subcategories. 我需要在菜单中的每个项目之后添加带有onclick的元素,这将解压缩子ul元素以显示子类别。 Anyway... this is my code. 无论如何...这是我的代码。

var catEl = document.getElementsByClassName("standard first");
var parEl = document.getElementsByClassName("child first");
var catNumb = catEl.length;
var parNumb = parEl.length;
var catOrd = 0;
var parOrd = 0;

while (catOrd < catNumb) {
  var newNode = document.createElement('a');
  newNode.classList.add("opener");
  newNode.innerHTML="x";
  newNode.onclick = function() {
    if (!parEl[parOrd].classList.contains("open")) {
      parEl[parOrd].classList.add("open");
    }
    else {
      parEl[parOrd].classList.remove("open");
    }
  };

  catEl[catOrd].after(newNode);
  catOrd++;
  parOrd++;
}

There is one problem and I don't know how to solve it, or what is wrong with it. 有一个问题,我不知道如何解决,或有什么问题。 The part with 与部分

if (!parEl[parOrd].classList.contains("open")) {
      parEl[parOrd].classList.add("open");
    }
    else {
      parEl[parOrd].classList.remove("open");
    }

is incorrect in some way. 在某种程度上是不正确的。 Dev tools in Chrome say "Uncaught TypeError: Cannot read property 'classList' of undefined at HTMLAnchorElement.newNode.onclick" If I substitute [parOrd] with a number, then it works. Chrome中的开发工具说“未捕获的TypeError:无法读取HTMLAnchorElement.newNode.onclick上未定义的属性'classList'”如果将[parOrd]替换为数字,则可以使用。

I'm beginner in JS, what am I doing wrong? 我是JS的初学者,我在做什么错?

Thanks! 谢谢!

UPDATED CODE: 更新的代码:

<script>

var parEl = document.getElementsByClassName("child first");
var parNumb = parEl.length;
var parOrd = 0;

while (parOrd < parNumb) {
  var newNode = document.createElement('a');
  newNode.classList.add("opener");
  newNode.innerHTML="x";
  newNode.onclick = function() {
    // returns 4 - number of elements of parEl (0 1 2 3 + 1 more for parOrd++ because it increments once more before making while statement invalid)
    document.getElementById("log").innerHTML = parOrd;
    if (!parEl[parOrd].classList.contains("open")) {
      parEl[parOrd].classList.add("open");
    }
    else {
      parEl[parOrd].classList.remove("open");
    }
  };
  parEl[parOrd].after(newNode);
  parOrd++;
}

</script>

You perform no checks of parOrd in the while lopp, to see IF its in a valid range. 您在while lopp中不执行parOrd检查,以查看其是否在有效范围内。 I would log it to see why that happens. 我将其记录下来以查看发生这种情况的原因。 And if there are constraints on that number, make sure to check them beforehand. 并且如果该数字有限制,请确保事先检查。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM