【问题标题】:for loop stops at first iterationfor 循环在第一次迭代时停止
【发布时间】:2012-03-05 08:57:13
【问题描述】:

编辑 谢谢大家的帮助。我已经使用 try and catch (err) 对脚本进行了修改,但是,当代码运行时,我仍然没有收到警报。我还用“studentInfo[i].getElementsByTagName("id")[0].childNodes[0] 替换了“studentInfo[i].getElementsByTagName("id")[i].childNodes[i].nodeValue"。 nodeValue" 以及所有类似的引用,除了现在,它甚至不会返回第一个循环。由于某种原因,它似乎在“捕获”之前退出了该功能。我已将更改标记为粗体。


我知道这个网站上已经发布了很多,但似乎没有一个答案能够帮助我。我有一个 for 循环,在第一个循环之后停止迭代。第一个循环的数据是正确的,但我需要它继续循环。我使用了几个不同的 lint 工具,他们说我的代码是有效的,所以我必须强迫它以某种方式退出循环。请有人帮我弄清楚我做错了什么。

  <html>
  <head>
  <title>Tardy Reporting</title>
  <script type="text/javascript" src="students.js">
  </script>
  </head>
  <body>

  <h1>Scan in Student ID</h1>
  <form method="POST" name="idForm" id="idForm" />
    <input type="text" name="idNumber" id="idNumber"/>
    <input type="button" name="Search" value="Search"  onClick="getId(document.idForm.idNumber.value);" />
  </form>
  <br></br>
  <div id="div1"></div>
  <p>
  </body>
  </html>

var ajxObj;
  if(window.XMLHttpRequest){
    ajxObj = new XMLHttpRequest();
  }
  else{
    ajxObj = new ActiveXObject('Microsoft.XMLHTTP');
  }  
ajxObj.open("GET","studentbase.xml",false);
ajxObj.send();
xmlData = ajxObj.responseXML;
var studentInfo = xmlData.getElementsByTagName("student");

function getId(studentId) {
  **try{**
    for(var i = 0; i < studentInfo.length; i++) {
        if(studentId == **studentInfo[i].getElementsByTagName("id")[0].childNodes[0].nodeValue || studentId === studentInfo[i].getElementsByTagName("name")[0].childNodes[0].nodeValue**){
            document.getElementById('div1').innerHTML=(studentInfo[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
        }
        else {
        document.getElementById('div1').innerHTML="Error: Not Found"
        }
    }
   **}catch (err){
      alert(err.ToString());
    }**

}


<?xml version="1.0" encoding="UTF-8" ?>

<thebase>
    <student>
    <id>50011234</id>   
        <name>Mike Simpson</name>
        <grade>n/a</grade>
        <teacher>George Washington</teacher>
        <tardies>0</tardies>
    </student>
    <student>
        <id>50012345</id>
        <name>Greg Pollard</name>
        <grade>n/a</grade>
        <teacher>Darth Vadar</teacher>
        <tardies>0</tardies>
    </student>
    <student>
        <id>50013456</id>
        <name>Jason Vigil</name>
        <grade>n/a</grade>
        <teacher>Obi Wan Kenobi </teacher>
        <tardies>0</tardies>   
    </student>
</thebase>

【问题讨论】:

  • 您可能只想在循环之前添加console.log(studentInfo) 以查看实际返回的内容。将其发布到您的问题中,我们将查看存在哪些错误。
  • 我得到“[object HTMLCollection]”

标签: javascript html xml ajax for-loop


【解决方案1】:

我怀疑您的代码引发了错误,而您没有意识到这一点。我怀疑引用“studentInfo[i].getElementsByTagName("id")[i].childNodes[i].nodeValue”应该是“studentInfo[i].getElementsByTagName("id")[0].childNodes[0]。节点值”。

尝试在“for”循环周围放置一个“try...catch”,如下所示:

function getId(studentId) {
    try {
        for(var i = 0; i < studentInfo.length; i++) {
            if (studentId == studentInfo[i].getElementsByTagName("id")[i].childNodes[i].nodeValue || studentId === studentInfo[i].getElementsByTagName("name")[i].childNodes[i].nodeValue){
                document.getElementById('div1').innerHTML=(studentInfo[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
            }
            else {
            document.getElementById('div1').innerHTML="Error: Not Found"
            }
        }
    } catch (err) {
        alert(err.ToString());
    }
}   

【讨论】:

  • 我真的认为这就是答案
  • 我同意。这大概就是问题所在。这就是为什么它会在第一次通过时起作用,因为那时 i == 0。
【解决方案2】:

if 语句中需要三个等号(即“===”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多