非依赖保管箱

马修·古登堡

我有以下代码:

function addRow(tableID) {
  var table = document.getElementById(tableID);
  var rowCount = table.rows.length;
  var row = table.insertRow(rowCount);
  var colCount = table.rows[0].cells.length;

  for (var i = 0; i < colCount; i++) {
    var newcell = row.insertCell(i);
    newcell.style.property = 'value'
    newcell.innerHTML = table.rows[0].cells[i].innerHTML;
    //alert(newcell.childNodes);
    switch (newcell.childNodes[0].type) {
      case "text":
        newcell.childNodes[0].value = "";
        break;
      case "checkbox":
        newcell.childNodes[0].checked = false;
        break;
      case "select-one":
        newcell.childNodes[0].selectedIndex = 0;
        break;
    }
  }
}


function showUser(str) {
  if (str == "") {
    document.getElementById("txtHint").innerHTML = "";
    return;
  } else {
    if (window.XMLHttpRequest) {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp = new XMLHttpRequest();
    } else {
      // code for IE6, IE5
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById("txtHint").innerHTML = this.responseText;
      }
    };
    xmlhttp.open("GET", "getcategory.php?q=" + str, true);
    xmlhttp.send();
  }
}
<form action="edit.php" method="post">
  <table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered" id="dataTable">
    <tr>
      <td>
        <select name="id" id="id" width="100%" onchange="showUser(this.value)">
          <option value="">SELECT A TOPIC</option>
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
        </select>
      </td>
      <td>
        <div id="txtHint"><b>Select a topic...</b></div>
      </td>
      <td>aaa</td>
    </tr>
  </table>
  <br />
  <input type="button" class="btn btn-warning pull-left" value="Add another topic" onclick="addRow('dataTable')" />
  <button class="btn btn-success pull-right" name="submit_mult" type="submit" style="size:50;">
		Start Quiz
	</button>
</form>

code.php

<select name="id" id="id" width="100%" onchange="showUser(this.value)">
<option value="">SELECT A TOPIC</option>    
<?php 
echo "<option value=".$id.">".$row['category_name']."</option>";
?>
<div id="txtHint"><b>Select a topic...</b></div>
<button type="button" class="btn btn-warning pull-left" value="" onclick="addRow('dataTable')" />   
    Add another topic
</button>
<button class="btn btn-success pull-right" name="submit_mult" type="submit" style="size:50;">
    Start Quiz
</button>

script.js

function addRow(tableID) {

    var table = document.getElementById(tableID);

    var rowCount = table.rows.length;
    var row = table.insertRow(rowCount);

    var colCount = table.rows[0].cells.length;

    for(var i=0; i<colCount; i++) {

        var newcell = row.insertCell(i);
        newcell.style.property='value'

        newcell.innerHTML = table.rows[0].cells[i].innerHTML;

        //alert(newcell.childNodes);
        switch(newcell.childNodes[0].type) {
            case "text":
                    newcell.childNodes[0].value = "";
                    break;
            case "checkbox":
                    newcell.childNodes[0].checked = false;
                    break;
            case "select-one":
                    newcell.childNodes[0].selectedIndex = 0;
                    break;
        }
    }
}


function showUser(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","getcategory.php?q="+str,true);
        xmlhttp.send();
    }
}

所以,事实是,每当我在表中添加另一行时,单击“添加另一个主题”按钮并在该行的下拉框中选择一个选项,而不是更改该行的数据,而是更改第一行的数据。

在此处输入图片说明 在此示例中,我更改了第5行的保管箱菜单的选择,但是如您所见,它将始终只影响第1行。

有人可以帮我吗?

mplungjan

我想你想这样做。

我无法测试Ajax,但请取消注释并尝试

function addRow(tableID) {
  var table = document.getElementById(tableID);
  var rowCount = table.rows.length;
  var newRow = table.rows[0].cloneNode(true);
  newRow.querySelector(".txtHint").innerHTML="<b>Select a topic</b>";
  [...newRow.querySelectorAll("input, select")].forEach(inp => {
    switch (inp.type) {
      case "text":
        inp.value = "";
        break;
      case "checkbox":
        inp.checked = false;
        break;
      case "select-one":
        inp.id = "sel" + rowCount;
        inp.selectedIndex = 0;
        break;
    }
  })
  table.appendChild(newRow);

}


function showUser(sel) {
  var str = sel.value,
    id = sel.id,
    sel = document.getElementById(id);
  if (str == "") {
    var rowCount = table.rows.length;
    sel.closest("tr").querySelector(".textHint").innerHTML = "";
    return;
  } else {
    console.log(id, str)
    /*
      if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
      } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById(id).closest("tr").querySelector(".textHint").innerHTML = this.responseText;
        }
      };
      xmlhttp.open("GET", "getcategory.php?q=" + str, true);
      xmlhttp.send();
      */
  }
}
<form action="edit.php" method="post">
  <table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered">
    <tbody id="dataTable">
      <tr>
        <td>
          <select name="id" id="sel0" width="100%" onchange="showUser(this)">
            <option value="">SELECT A TOPIC</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
          </select>
        </td>
        <td>
          <div class="txtHint"><b>Select a topic...</b></div>
        </td>
        <td>aaa</td>
      </tr>
    </tbody>
  </table>
  <br />
  <input type="button" class="btn btn-warning pull-left" value="Add another topic" onclick="addRow('dataTable')" />
  <button class="btn btn-success pull-right" name="submit_mult" type="submit" style="size:50;">
		Start Quiz
	</button>
</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从保管箱读取文件

来自分类Dev

保管箱加载太晚

来自分类Dev

无法从保管箱下载文件

来自分类Dev

Google Webfont在保管箱上的问题

来自分类Dev

将别名放入我的保管箱

来自分类Dev

重置时更改保管箱背景

来自分类Dev

从保管箱获取最新的更改

来自分类Dev

回形针和保管箱错误

来自分类Dev

移动保管箱文件夹

来自分类Dev

将别名放入我的保管箱

来自分类Dev

全盘加密和保管箱

来自分类Dev

保管箱和代理设置

来自分类Dev

创建不同保管箱的数组

来自分类Dev

在iOS中预览保管箱文件

来自分类Dev

安装保管箱错误结束

来自分类Dev

更新不同的保管箱实例

来自分类Dev

无法从保管箱下载文件

来自分类Dev

使用硒登录到保管箱

来自分类Dev

保管箱菜单的首页布局很奇怪

来自分类Dev

保管箱和Consul:保管箱存储未显示在Consul UI中

来自分类Dev

在保管箱未运行时更改保管箱选择性同步

来自分类Dev

如何使用保管箱下载文件

来自分类Dev

删除Git中的损坏名称(与保管箱冲突的副本)

来自分类Dev

从python脚本上传文件到我的保管箱

来自分类Dev

批量重命名保管箱冲突文件

来自分类Dev

在tvOS上对保管箱进行身份验证

来自分类Dev

保管箱:如何识别已包装令牌的响应

来自分类Dev

将文件从保管箱下载到服务器

来自分类Dev

更新PYTHONPATH变量,指向包含空格的保管箱目录