2017-03-07 45 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

相關問題