Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript元素名称更改恢复为原始名称_Javascript_Dom_Onchange - Fatal编程技术网

Javascript元素名称更改恢复为原始名称

Javascript元素名称更改恢复为原始名称,javascript,dom,onchange,Javascript,Dom,Onchange,函数结束后,克隆输入元素“terminal0”的JavaScript名称更改不会保存和/或恢复为原始名称。所有其他名称/id更改都有效,但第一个元素名称更改会在函数完成后恢复。即使是第一个元素“terminal0”id更改也能成功工作。在函数退出之前,我已经测试并确认了名称更改是否有效,方法是在其末尾放置一个警报(cTerm.name)。有人知道为什么第一个输入元素的名称更改不起作用吗 <tr id="tr1"> <td id="tr1Td0"> Terminal <

函数结束后,克隆输入元素“terminal0”的JavaScript名称更改不会保存和/或恢复为原始名称。所有其他名称/id更改都有效,但第一个元素名称更改会在函数完成后恢复。即使是第一个元素“terminal0”id更改也能成功工作。在函数退出之前,我已经测试并确认了名称更改是否有效,方法是在其末尾放置一个警报(cTerm.name)。有人知道为什么第一个输入元素的名称更改不起作用吗

<tr id="tr1">
<td id="tr1Td0">
Terminal <input type="checkbox" name="terminal0" id="terminal0" value="0" onClick="cbUpdate()">
<br>
Imager <input type="checkbox" name="imager0" id="imager0" value="0" onClick="cbUpdate()">
</td>
</tr>
</tbody>
</table>

function addTable()
{
    var gssTable = document.getElementById("gssTable");
    var currTables = gssTable.rows[0].cells.length;
    var selNum = document.getElementById("sNum").value;
    var tr0 = document.getElementById("tr0");
    var tr1 = document.getElementById("tr1");
    var br = document.createElement('br');

    for(x=currTables; x < selNum; x++)
    {
        var tr0Td0 = tr0.insertCell(-1);
        var setID0 = document.getElementById("setID0");
        var cSetID = setID0.cloneNode(true);
        cSetID.id = "setID" + x;
        cSetID.name = "setID" + x;
        tr0Td0.appendChild(cSetID);

        var tr1Td0 = tr1.insertCell(-1);
        tr1Td0.innerHTML="Terminal";
        var terminal0 = document.getElementById("terminal0");
        var cTerm = terminal0.cloneNode(true);
        cTerm.id = "test" + x;
        cTerm.name = "test" + x;
        tr1Td0.appendChild(cTerm);
        tr1Td0.appendChild(br);
        tr1Td0.innerHTML = tr1Td0.innerHTML + "Imager"
        var imager0 = document.getElementById("imager0");
        var cImager = imager0.cloneNode(true);
        cImager.id = "imager" + x;
        cImager.name = "imager" + x;
        tr1Td0.appendChild(cImager);
    }

    while (currTables > selNum)
    {
        tr1.deleteCell(-1);
        tr0.deleteCell(-1);

        currTables = currTables - 1;
    }

航空站

成像仪 函数addTable() { var gssTable=document.getElementById(“gssTable”); var currTables=gssTable.rows[0].cells.length; var selNum=document.getElementById(“sNum”).value; var tr0=document.getElementById(“tr0”); var tr1=document.getElementById(“tr1”); var br=document.createElement('br'); 对于(x=currTables;xselNum) { tr1.deleteCell(-1); tr0.deleteCell(-1); currTables=currTables-1; }
设置innerHTML会使浏览器重新呈现该元素及其内容。由于您在循环的每次迭代中都这样做,因此可能会导致innerHTML未更新到其上方appendChild调用的最新效果的竞态情况

因此,您不必每次都设置innerHTML,只需创建、使用并附加它即可

tr1Td0.appendChild(document.createTextNode("Imager"));

你能制作一个可执行的代码片段或JSFIDLE来演示这个问题吗?每次你都可以创建一个文本节点并将其追加,而不是设置innerHTML,即
tr1Td0.appendChild(document.createTextNode(“Imager”))
我试图制作一个JSFIDLE示例,但我使用的是coldfusion,因此它似乎不能正常工作。基本上,问题是第一个输入名称没有像其他名称一样改变,我不知道为什么。@PatrickEvans嘿,TY先生,这就是lolTY@PatrickEvans解释您最初解决方案背后的逻辑n工作了,这对我来说很重要,泰蒂