2011-08-28 92 views
0

我試圖讓一些使用jQuery的Django運行AJAX。問題是,我試圖改變的元素ID沒有設置,它是一個Django模板變量,所以它對錶中的每個元素都是不同的,但我想用AJAX來更改該元素。我通過simplejson將Django視圖中的字典傳遞給JavaScript,相關對象是ID和模型(不是真正的變量名稱,只是想讓我明白我在做什麼)。一些僞代碼(第三行,這樣寫巨蟒,因爲我不知道如何做到這一點在JavaScript):可以將一個變量作爲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以同樣的方式接受它。


你可能不應該自己在做eval()來解析JSON。我非常肯定,當您執行AJAX請求時,您可以讓JQuery爲您做這件事。

+0

然後我應該能夠得到這樣的id:var newtotal = document.getElementById(id);也許。使用eval是因爲有時我在字符串中傳遞字符串而不是字典 – Christopher

+0

是的,包含字符串和字符串字符串的變量是完全可以互換的。至於錯誤,您可以嘗試讓服務器通過HTTP響應代碼發出信號。這可以在客戶端進行檢測,因此您可以根據不同情況執行不同的操作。 – hugomg

+0

我想這根本不是問題。我用join()做了類似的事情,得到了相同的結果,這個例子中的行應該是newtotal.innerHTML,但是任何小計(在我的實際代碼中都是正確的)會返回爲null。 – Christopher

0

如果您的元素ID沒有設置,您可能需要使用其他方法識別元素。許多JS框架(如jQuery)通過CSS Selector支持標識。例如,您可以通過標記和類的組合來識別要更改的元素。

有關可用選擇的文件,你應該閱讀jQuery Selector Documentation

0

你可以完全傳遞jquery css選擇器作爲變量。簡單的例子:

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

在這個例子中,我們搶到第一TD的ID在文檔中,找到自己的ID,並用它來獲得「myElement」

您可能會發現它有用審查jQuery文檔(api.jquery.com)的「選擇器」部分查看所有用於查找元素的選項。在我的例子中,我也使用jquery.eq()方法,它將選擇器列表(在本例中爲所有TD)過濾爲特定的列表。

相關問題