1

非表示のフォームデータをDjangoサーバーに送信する方法を探しています。これは、javascriptとhtml(template)を同じファイルに保持している限り正常に機能しますが、現在は分離しようとしています。彼ら。

おそらく本当に単純ですが、私がしなければならないのは、window / htmlの「名前」を取得(設定?)し、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'document'の要素に到達できません。これらは現在、異なるドキュメントにあるためです(物理的に..)。どういうわけか、ドキュメントに名前/変数を割り当てる必要があると思います。そしてそれを次のように呼び出します:nameOfDocument.getElement.。

等々..

4

2 に答える 2

2

私はその線を推測します

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

問題です-含まれているJavascriptファイルはDjangoテンプレートローダーを通過しないため、その中に変数を配置することはできません。この条件は常にfalseと評価されます。

テンプレートファイルに何らかの方法で変数を設定してから、Javascriptで取得する必要があります。これを行うための最良の方法は、おそらくres.score2SetpostIt()関数に追加の引数として追加してから、次のことを行うことです。

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

明らかに私はあなたのアプリケーションが何をするのか本当にわからないので、これは当てはまらないかもしれません。HTMLの他の場所で使用されている場合res.score2Setは、JavascriptのDOMからロードする方がよい場合があります。

于 2012-06-08T10:58:41.520 に答える
0

JavaScriptに関するあなたの仮定は間違っています。JSコード(インライン、ファイル内、外部ファイル)を作成する場合は常に、すべてのJSコードがDOMにアクセスできるため、問題はJSファイルが正しくロードされていないことです。

于 2012-06-08T09:59:38.290 に答える