2012-06-08 89 views
1

我正在尋找一種方法將一些隱藏的表單數據發送到Django服務器,只要將JavaScript和html(模板)保存在同一個文件中,但現在我試圖將它們分開。從javascript文件訪問webform

可能真的很簡單,但我想我所要做的就是獲取(set?)window/html的'name'並從javascript模塊訪問它?

HTML:

<html> 
<head> 
<script src="/media/postIt.js"></script> 
</head> 
<body> 
<form action="" method="post" id="postForm">{% csrf_token %} 
<input type="hidden" id="scoreField1" name="score1"></input>  
<input type="hidden" id="scoreFieldSet1" name="score1Set"></input> 
<input type="hidden" id="scoreField2" name="score2"></input> 
<input type="hidden" id="scoreFieldSet2" name="score2Set"></input> 
<input type="hidden" id="scoreField3" name="score3"></input> 
<input type="hidden" id="scoreFieldSet3" name="score3Set"></input> 
</form> 

<table> 
<tr> 
     <td id="bg1" onclick="postIt('score1')"> 
      Ones 
     </td> 
     <td id="bg1_1"> 

     </td> 
    </tr> 

    <tr> 
     <td id="bg2" onclick="postIt('score2')"> 
      Twos 
     </td> 
     <td id="bg2_1"> 

     </td> 
    </tr> 
</table> 

的Javascript:

function postIt(x){ 

var pointArray = [d1,d2,d3,d4,d5]; 
var totVal = d1+d2+d3+d4+d5; 

pointArray.sort(function(a,b){return a-b}); 
alert(pointArray); 

alert("total value: " + totVal);  

if(x == "score2"){ 
    if("{{ res.score2Set }}" == 0){  

      var form = document.getElementById('postForm'); 

      document.getElementById('scoreField1').value = score1; 
      document.getElementById('scoreFieldSet1').value = score1Set; 

      document.getElementById('scoreField2').value = score; 
      document.getElementById('scoreFieldSet2').value = 1; 

      document.getElementById('scoreField3').value = score3; 
      document.getElementById('scoreFieldSet3').value = score3Set; 

      form.submit(); 


    }  
} 

編輯: 澄清: 我不能只調用document.getElement達到HTML '文檔' 中的元素...因爲他們現在在不同的文件(物理上)。我想我必須以某種方式爲文檔分配一個名稱/變量。 而這樣稱呼它: nameOfDocument.getElement ..

等..

+0

你的問題是什麼?什麼對您發佈的代碼無效(對我來說很好)? –

+0

編輯我的問題。 – BSG

+0

「我無法訪問html文檔中的元素」 - 真的嗎?你真的嘗試過嗎? –

回答

2

我猜想,行

if("{{ res.score2Set }}" == 0) 

的問題 - 一個包含JavaScript文件不會通過Django的模板加載器,所以你不能把它裏面的變量。該條件將始終評估爲false。

您需要以某種方式在模板文件中設置變量,然後在Javascript中檢索它。要做到這一點,最好的方法將可能是添加res.score2Set作爲附加參數傳遞給postIt()函數,然後執行:

<td id="bg1" onclick="postIt('score2', '{{ res.score2Set }}')"> 

雖然很明顯,我真的不知道你的應用程序做什麼,所以這可能不適用。如果在HTML的其他地方使用了res.score2Set,則最好從Javascript中的DOM中加載它。

0

您對JavaScript是你寫wrong.Wherever JS代碼(內聯,內文件,外部文件)所有的JS代碼假設將有權訪問DOM.So,問題是你沒有正確加載你的JS文件。

+0

嗯,但我已經測試過,有警報,而且就我看到的情況而言,它的加載效果很好。 – BSG

+0

在腳本標記中放入type =「javascript」 –