2017-03-07 38 views
0

我从服务器获取数据并迭代它以创建表格,然后使用表单将JavaScript存储到本地存储。下面是代码片段如何创建唯一的ID,当在Golang中使用数据并在Javascript中使用时

<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引用它。 感谢

+0

还问[这里](https://groups.google.com/d/topic/golang-nuts/dNaoKtBEQp0/讨论)。下次请注意提及您用于发布问题的其他场所。 – kostix

回答

1

在循环您有

<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); 
} 
+0

非常感谢!这是一个很棒的解决方案。我试图找出一个JavaScript解决方案。你刚刚救了我的一天! – user3809560

相关问题