2011-08-28 97 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)过滤为特定的列表。

相关问题