цикл останавливается на первой итерации - PullRequest
0 голосов
/ 14 февраля 2012

EDIT Спасибо всем за вашу помощь. Я внес изменения в сценарий с помощью try и catch (err), однако я все еще не получаю предупреждение при запуске кода. Я также заменил "studentInfo [i] .getElementsByTagName (" id ") [i] .childNodes [i] .nodeValue" на studentInfo [i] .getElementsByTagName ("id") [0] .childNodes [0]. nodeValue ", а также все подобные ссылки, за исключением того, что теперь он даже не вернет первый цикл. Похоже, он выходит из функции до того, как по какой-то причине нажимает «catch». Я отметил изменения жирным шрифтом.


Я знаю, что это было размещено довольно много на этом сайте, но ни один из ответов, кажется, не в состоянии мне помочь. У меня есть цикл, который прекращает повторять после первого цикла. Данные из первого цикла верны, но мне нужно, чтобы они повторялись. Я использовал несколько разных инструментов 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>

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Я подозреваю, что ваш код выдает ошибку, и вы не знаете об этом.Я подозреваю, что ссылка "studentInfo [i] .getElementsByTagName (" id ") [i] .childNodes [i] .nodeValue" должна быть "studentInfo [i] .getElementsByTagName (" id ") [0] .childNodes [0].nodeValue ".

Попробуйте поместить цикл" try ... catch "вокруг цикла" for ", например:

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());
    }
}   
0 голосов
/ 14 февраля 2012

В выражении if должно быть три знака равенства (т. Е. "===").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...