Django迴圈創造div後,對各個div操作後觸發事件,傳遞資料(Django九)
前面我用for迴圈建立了div,每個div中有各自的資料以及同樣的佈局
效果圖如下:
部分程式碼如下:
現在,我希望在點選每個div裡的發表按鈕時,能在js裡獲取{{problem.pro_id}}以及{{problem.user_name}}這兩個引數,然後進行傳遞,寫入資料庫等等操作
然而,根據一般的寫法,按鈕點選事件:(’#…’).onclick或者是獲取值:document.getElementById 全部都只對第一個div有效
也就是我點選按鈕,只有第一個div裡的按鈕可以點選,其他div裡的按鈕點選無響應
獲取值我也只能獲取第一個div裡的{{problem.pro_id}}以及{{problem.user_name}}
這顯然不符合我們的需求
解決方法如下:
<script>
var btn=document.getElementsByTagName('button')
for(var i=0;i<btn.length;i++){
(function(n){
btn[n].onclick=function(){
alert(n);
}
})(i);
}
</script>
上述程式碼中,var btn=document.getElementsByTagName(‘button’)自動幫我們查詢頁面所有的button按鈕,並返回一個列表給我們,此時,btn[n]便依次代表我們從上到下的div裡的各個按鈕,btn[0]代表第一個div裡的按鈕,btn[1]代表第二個div裡的按鈕,依次類推…
而我要傳遞的第一個數值,{{problem.pro_id}}其實是從1開始,每次加一的,代表著div的編號,我們這裡直接用n+1進行代替,不再多寫方法獲取了
但我們還有一個引數需要獲取,就是{{problem.user_name}}
如圖,我把它寫在了< a >標籤下,如果你是寫在了其他標籤下,照著我的方法也一樣的獲取
對上面< script >中的程式碼略作修改
<script> var btn=document.getElementsByTagName('button') var a=document.getElementsByClassName('user-name') for(var i=0;i<btn.length;i++){ (function(n){ btn[n].onclick=function(){ var user_name = a[n].innerText; alert(user_name); } })(i); } </script>
重點注意其中的程式碼;var a=document.getElementsByClassName(‘user-name’),原理與 var btn=document.getElementsByTagName(‘button’)類似,它搜尋html頁面中所有class名為user-name的標籤,獲取標籤的內容,返回一個列表給我們
而var user_name = a[n].innerText;就是獲取對應排號為n的,class為user-name的標籤的欄位內容(我是用的< a >標籤,用innerText,其他的標籤不一定,但百度一下就可以有),當點選div裡的按鈕時,會有alert提示值,讓我們便於矯正。這樣我們就可以獲取到不同div裡的值了
另外,n這個數的選取要注意:
如圖,我有多個標籤class名為user-name,但只有{{problem.user_name}}這一個資料是我所需要的,如何具體選取,這裡不多贅述