javascript - 如何在 Golang 中遍历数据并在 Javascript 中使用时创建唯一 ID

标签 javascript html go local-storage pipeline

我从服务器获取数据并迭代它以创建一个表,然后我使用一个表单使用 javascript 将 id 存储到本地存储。这是代码片段

<table>
    <tr><th>Product ID</th></tr>
    {{range .}}
    <td ><form onsubmit="save_data()" action="/" method="get"><button class="btn btn-info pid" id="pid" name="{{.puid}}" value="{{.puid}}">Update</button></form></td>
    {{end}}
<table>

<script>

function save_data() {
  var input = document.getElementByID("pid");
  localStorage.setItem("id", input.value); 

}   

</script>

但是每次,无论我单击哪个表格行的“更新”按钮,每次都只会存储第一个表格行元素的 ID。 有没有一种方法可以生成唯一的 ID 并在遍历数据时在 Javascript 中引用它。 谢谢

最佳答案

在你的循环中

<button class="..." id="pid" name="{{.puid}}" value="{{.puid}}">Update</button>

这意味着所有按钮都有 id 属性和相同的值 pid。这是一个错误,因为 id-s 在文档中必须是唯一的。当你打电话时

document.getElementById("pid");

返回与 id="pid" 匹配的第一个元素。这解释了为什么“只有第一个表格行元素的 ID 被存储”。

要为每一行创建唯一的 ID,您可以使用类似的东西

{{range $index, $value := .}}
...<button class="..." id="pid{{$index}}" name="{{$value.puid}}" value="{{$value.puid}}">Update</button>...
{{end}}

但是当您的 save_data() 事件触发时,您会遇到如何知道提交了哪个表单的问题。要解决这个问题,您可以将当前表单或行 ID 作为参数发送,例如

{{range $index, $value := .}}
<td><form onsubmit="save_data(this, {{$index}})" action="/" method="get">...</form></td>
{{end}}

function save_data(form, rowno) {
  var input = document.getElementById("pid"+rowno);
  localStorage.setItem("id", input.value); 
}  

关于javascript - 如何在 Golang 中遍历数据并在 Javascript 中使用时创建唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42642410/

相关文章:

javascript - 如何在事件发生后使用 React 滚动到某个元素?

javascript - 从 jquery call 调用 Angularjs HTTP 请求服务或选择 open

javascript - ASP.net Web 服务使用 javascript 发送命令

thread-safety - Go闭包捕获变量和共享数据?

amazon-web-services - 尝试在Golang中初始化SqsEvent记录

javascript - AngularJS n:n许诺和数据同步/排序

html - 为什么我的 HTML 代码中的 <tr> 标签在我的浏览器中没有按顺序显示?

javascript - 在 JQuery 中创建动态创建元素的事件

javascript - onSubmit 不适用于表单

json - 在 struct 标签中使用变量