【问题标题】:Jquery and Django multiple checkboxJquery 和 Django 多个复选框
【发布时间】:2010-02-03 21:52:22
【问题描述】:

我是 jquery 的初学者,所以请多多包涵。 我有一个 jquery 函数,它允许我选择多个复选框并创建一个字符串,如下所示:

function getSelectedVals(){
     var tmp =[];
     $("input[name='checks']").each(function() {
     if ($(this).attr('checked'))
     {
        checked = ($(this).val());
        tmp.push(checked);
     }
     });
     var filters = tmp.join(',');
     alert(filters)
     return filters;
}

然后我调用一个 django 视图函数并按如下方式传递字符串:

selected = getSelectedVals();
var myurl = "/bills/delete/?id=" + selected;
$.ajax({
    type: "GET",
    url: myurl,
    data: selected,
    cache: false

});

在服务器上,我有一个删除视图函数,它遍历复选框值并操作列表。

def delete(request):
    global myarray
    idx = request.GET[u'id']
    listidx = idx.split(',')
    for l in listidx:
        value = myarray[int(l)]
        myarray.remove(value)
    return HttpResponse("/bills/jqtut/")

问题是在服务器上,我作为 GET 字符串发送的所有索引都没有被处理,只有一半被处理。

请帮帮我!谢谢

【问题讨论】:

  • 您可以使用 $("input[name='checks']:checked").each 缩短每个函数并删除 if 语句。

标签: jquery python django


【解决方案1】:

据我所见,您可以这样做。您应该在所有复选框上设置相同的名称。我不知道你为什么要通过 GET 发送,我建议通过 POST 发送。

<input type="checkbox" name="vehicle" value="Bike" />
<input type="checkbox" name="vehicle" value="Car" />
<input type="checkbox" name="vehicle" value="Airplane" />

然后,在你的视图中使用 getlist() 方法:

def delete(request):
    values = request.POST.getlist(u'vehicle')
    # Handling goes here.

但无论如何,除非你真的需要做自定义的东西(但是特殊情况还不足以打破规则;),请使用 Django 表单。已经有一个复选框列表 OOTB。我不确定在这种情况下你为什么还要考虑使用 JavaScript。

【讨论】:

  • 谢谢!但是我又卡住了:(我试图将上述代码中的“过滤器”作为 POST 数据发送到 Django,但我无法找出正确的数据类型。发布这些数据的正确方法是什么,以便 django 看到列表它可以迭代吗?
【解决方案2】:

首先,我不知道您是否需要像您正在做的那样将复选框值操作成一个字符串。如果您为它们分配相同的 name 属性,http(或 jQuery 的)序列化将为您完成。

在 Django 端使用 getlist 获取列表,[] 访问器仅获取参数列表中的最后一个值。

但是,Http 默认处理不会发送未选中的复选框的值,因此您可能需要构建一些检查,将您构建的复选框与您返回的数据进行比较。

正如 Gavoja 上面所说,django forms 可能是一个很好的答案: 具体来说,您希望将 MultipleChoiceField 与 CheckboxSelectMultiple 小部件和选项一起使用:

my_field = forms.MultipleChoiceField(choices=SOME_CHOICES, widget=forms.CheckboxSelectMultiple())

另见:In Django is there a way to display choices as checkboxes?

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2014-07-05
    • 2011-09-04
    • 2014-05-12
    • 2013-12-17
    相关资源
    最近更新 更多