Javascript и XML innerHTML именование - PullRequest
0 голосов
/ 04 января 2012

Я пытаюсь заставить свои теги a отображать имя из xml-файла, в настоящее время у меня есть ссылка, меняющая цвет и текст, когда она запускается, но я бы хотел получить исходное имя состояния из xml-файла .

Меня интересуют только входные ссылки здесь.

Вот HTML-сторона вещей:

<div id="status">
    <div id="loading" style="display:none">Error:<br />Connection to EMACSYS board was lost.</div>
    <div id="display">
        <p></span></p>
        <p>Inputs:<br /><span style="font-size:20pt"></p>
        <a id="btn0">&bull; Input 1</a><br>
        <a id="btn1">&bull; Input 2</a><br>
        <a id="btn2">&bull; Input 3</a><br>
        <a id="btn3">&bull; Input 4</a><br>
        <a id="btn4">&bull; Input 5</a><br>
        <a id="btn5">&bull; Input 6</a><br>
        <a id="btn6">&bull; Input 7</a><br>
        <a id="btn7">&bull; Input 8</a><br>
        <a id="btn8">&bull; Input 9</a><br>
        <a id="btn9">&bull; Input 10</a><br>
        <a id="btn10">&bull; Input 11</a><br>
        <a id="btn11">&bull; Input 12</a><br>
        <a id="btn12">&bull; Input 13</a><br>
        <a id="btn13">&bull; Input 14</a><br>
        <a id="btn14">&bull; Input 15</a><br>
        <a id="btn15">&bull; Input 16</a><br>
        </span> </p>
        <p>Canopy Temperature: <a id="analogue0">?</a>
        <br /><span style="font-size:20pt">
        <a id="pot0">&rsaquo;</a>
        <a id="pot1">&rsaquo;</a>
        <a id="pot2">&rsaquo;</a>
        <a id="pot3">&rsaquo;</a>
        <a id="pot4">&rsaquo;</a>
        <a id="pot5">&rsaquo;</a>
        <a id="pot6">&rsaquo;</a>
        <a id="pot7">&rsaquo;</a>
        <a id="pot8">&rsaquo;</a>
        <a id="pot9">&rsaquo;</a>
        </span></p>
        <p>Engine Heater Temperature: <a id="analogue1">?</a> (30-90 normal)
        <br /><span style="font-size:20pt">
        <a id="1pot0">&rsaquo;</a>
        <a id="1pot1">&rsaquo;</a>
        <a id="1pot2">&rsaquo;</a>
        <a id="1pot3">&rsaquo;</a>
        <a id="1pot4">&rsaquo;</a>
        <a id="1pot5">&rsaquo;</a>
        <a id="1pot6">&rsaquo;</a>
        <a id="1pot7">&rsaquo;</a>
        <a id="1pot8">&rsaquo;</a>
        <a id="1pot9">&rsaquo;</a>
        </span></p>

    </div>

Что все выглядит нормально и работает нормально при срабатывании входа, но там, где говорится «Вход 1», «Вход 2» и т. Д., Я хотел бы, чтобы он загружал из этого XML-файла теги имени входа

<response>
<input0>~Inputs(1)~</input0>
<inputname0>Mains OK</inputname0>
<input1>~Inputs(2)~</input1>
<inputname1>Water Heater</inputname1>
<input2>~Inputs(3)~</input2>
<inputname2>Genset Standby</inputname2>
<input3>~Inputs(4)~</input3>
<inputname3>Genset Running</inputname3>
<input4>~Inputs(5)~</input4>
<inputname4>Common Alarm</inputname4>
<input5>~Inputs(6)~</input5>
<inputname5>Genset Shutdown Alarm</inputname5>
<input6>~Inputs(7)~</input6>
<inputname6>Genset Fuel Tank 1/2</inputname6>
<input7>~Inputs(8)~</input7>
<inputname7>Genset Fuel Tank 1/4</inputname7>
<input8>~Inputs(9)~</input8>
<inputname8>Genset Fuel Tank Low</inputname8>
<input9>~Inputs(10)~</input9>
<inputname9>option</inputname9>
<input10>~Inputs(11)~</input10>
<inputname10>option</inputname10>
<input11>~Inputs(12)~</input11>
<inputname11>Bulk Fuel Full</inputname11>
<input12>~Inputs(13)~</input12>
<inputname12>Bulk Fuel 3/4</inputname12>
<input13>~Inputs(14)~</input13>
<inputname13>Bulk Fuel 1/2</inputname13>
<input14>~Inputs(15)~</input14>
<inputname14>Bulk Fuel 1/4</inputname14>
<input15>~Inputs(16)~</input15>
<inputname15>Bulk Fuel Low</inputname15>
<output0>~Outputs(1)~</output0>
<output1>~Outputs(2)~</output1>
<output2>~Outputs(3)~</output2>
<output3>~Outputs(4)~</output3>
<output4>~Outputs(5)~</output4>
<output5>~Outputs(6)~</output5>
<output6>~Outputs(7)~</output6>
<output7>~Outputs(8)~</output7>
<output8>~Outputs(9)~</output8>
<output9>~Outputs(10)~</output9>
<output10>~Outputs(11)~</output10>
<output11>~Outputs(12)~</output11>
<output12>~Outputs(13)~</output12>
<output13>~Outputs(14)~</output13>
<output14>~Outputs(15)~</output14>
<output15>~Outputs(16)~</output15>
<analogue0>~Analogs(1,T,2,3977)~</analogue0>
<analogue1>~Analogs(2)~</analogue1>
<analogue2>~Analogs(3)~</analogue2>
<analogue3>~Analogs(4)~</analogue3>
<analogue4>~Analogs(5)~</analogue4>
<analogue5>~Analogs(6)~</analogue5>
<analogue6>~Analogs(7)~</analogue6>
<analogue7>~Analogs(8)~</analogue7>
</response>

Таким образом, для входа 1 будет отображаться Mains OK, затем при срабатывании будет отображаться Alert, а затем обратно в Mains OK, когда он вернется в нормальное состояние.

Я попробовал несколько вещей в javascript:

<script type="text/javascript">
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {
    // Check if a timeout occurred
    if(!xmlData)
    {
        document.getElementById('display').style.display = 'none';
        document.getElementById('loading').style.display = 'inline';
        return;
    }

    // Make sure we're displaying the status display
    document.getElementById('loading').style.display = 'none';
    document.getElementById('display').style.display = 'inline';

    // Loop over all the LEDs
    for(i = 0; i < 16; i++) {
        if(getXMLValue(xmlData, 'input'+i) == '1') {
            document.getElementById('btn' + i).style.color = '#d00';
            document.getElementById('btn' + i).innerHTML = '&bull; ALERT';
            }
        else {
            document.getElementById('btn' + i).style.color = '#090';
            document.getElementById('btn' + i).innerHTML = ('&bull; )getXMLValue(xmlData, 'inputname'+i);
        }
    }

    // Loop over all the buttons

    // Update the POT value
    document.getElementById('analogue0').innerHTML =getXMLValue(xmlData,'analogue0');
    val=0;
    for(i = 0; i < 10; i++) {
    val=val+10;
    if(getXMLValue(xmlData, 'analogue0') >val)
        document.getElementById('pot' + i).style.color = '#090';
    else
        document.getElementById('pot' + i).style.color = '#fff';
    }

    // Update the POT value 2
    document.getElementById('analogue1').innerHTML =getXMLValue(xmlData,'analogue1');
    val=0;
    for(i = 0; i < 10; i++) {
    val=val+10;
    if(getXMLValue(xmlData, 'analogue1') >val)
        document.getElementById('1pot' + i).style.color = '#090';
    else
        document.getElementById('1pot' + i).style.color = '#fff';
    }


}
setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);
</script>

но не к удаче. Я почти уверен, что это связано с частью JavaScript, потому что это моя самая слабая область.

1 Ответ

1 голос
/ 04 января 2012

Я считаю, что у вас есть синтаксическая ошибка в следующей строке кода:

document.getElementById('btn' + i).innerHTML = ('&bull; )getXMLValue(xmlData, 'inputname'+i);

В правой части знака равенства у вас есть неопределенная строка:'&bull;...

Я не уверен в том, что именно вы пытаетесь сделать, но я предполагаю, что вы хотите получить точку с маркером, за которой следует результат getXMLValue(xmlData, 'inputname'+1)

Я бы посоветовал вам попробовать заменить эту строку следующим текстом: document.getElementById('btn' + i).innerHTML = '&bull;' + getXMLValue(xmlData, 'inputname'+i);

Пожалуйста, дайте мне знать, как это работает для вас.

...