2011-08-28 11 views
0

jQueryを使用してDjangoで動作するAJAXを取得しようとしています。問題は、私が変更しようとしている要素のIDが石で設定されていないということです。これはDjangoのテンプレート変数なので、テーブルの要素ごとに異なりますが、AJAXを使用してその要素を変更します。私は辞書をDjangoビューからsimplejson経由でJavaScriptに渡しています。関連するオブジェクトはIDとモデルです(実際の変数名ではなく、私がしようとしていることを明らかにしたかったのです)。いくつかの擬似コード(私はJavaScriptでこれを行う方法を知らないので、三行目は、Pythonのようなことを書きました):変数をjavascriptの要素idとして渡すことができます

var quantity_update = function(msg, elem) { 
    var response_obj = eval('(' + msg + ')'); 
    var newtotal = document.getElementById("%s, %s"); % (response_obj.id, response_obj.model) 
    subtotal.innerHTML = "<td>"+response_obj.subtotal+"</td>"; 

は、この可能性のようなものであり、したがってどのようにしたら?

答えて

0

Javascriptをしないの派手な文字列フォーマット(%s)を持っていますが、あなたはちょうどあなたがPythonでできるように、プレーンな文字列の連結を使用することができます。

var id = response_obj.id + ', ' + resonse_obj.model 

dinamically生成されている文字列を心配する必要はありません。結局のところ文字列であり、getElementByIdはそれを同じように受け入れます。


おそらくJSONを解析するためにeval()を実行しないでください。私は、あなたがAJAXリクエストを行うときにJQueryがあなたにそれをさせることができると確信しています。

+0

私はこのようなIDを取得する必要があります:var newtotal = document.getElementById(id);多分。ビューでエラーが発生した場合に辞書ではなく文字列を渡すので、evalを使用する – Christopher

+0

はい、文字列と文字列リテラルを含む変数は完全に互換性があります。エラーについては、サーバーがHTTP応答コードでこれを通知するようにしてみてください。これはクライアント側で検出できるので、エラーがあったかどうかに応じて異なることができます。 – hugomg

+0

これはまったく問題ではないと思います。私はjoin()と同様のことをして、同じ結果を得ました。これはnewtotal.innerHTMLでなければならないが、代わりに小計です(実際のコードでは正しい)という例がnullに戻ります。 – Christopher

0

要素IDが石で設定されていない場合は、他の手段を使用して要素を識別できます。 jQueryのような多くのJSフレームワークは、CSSセレクタによる識別をサポートしています。たとえば、タグとクラスの組み合わせで変更したい要素を特定することができます。

利用できるセレクタのドキュメントについては、あなたが読むべきjQuery Selector Documentation

0

変数としてjquery CSSセレクタを完全に渡すことができます。簡単な例:この例では

var elementId = $('td').eq(0).attr('id'), 
    myElement = $('#'+elementId); 

、我々はあなたがそれが参考に検討するかもしれないそのIDを見つけて、「MYELEMENT」

を取得するためにそれを使用、ドキュメント内の最初のTDのIDをつかみますjQueryドキュメントの「セレクタ」セクション(api.jquery.com)を使用して、要素を見つけるためのすべてのオプションを確認します。私の例では、セレクタのリスト(この場合はすべてのTD)を特定のものにフィルタリングするjquery.eq()メソッドも使用しています。

関連する問題