Jquery和Django多个复选框

我是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字符串发送的所有索引都没有被处理,只有一半是。

请帮我! 谢谢

从我看来,你就是这样做的。 您应该在所有复选框上设置相同的名称。 我不知道你为什么要通过GET发送它,我建议你通过POST发送它。

    

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

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

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

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

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

然而,Http默认处理不会通过未选中的复选框的值发送,因此您可能希望构建一些检查,以比较您构建的复选框与您获得的数据。

正如Gavoja上面所说,django表单可能是一个很好的答案:具体来说,你想要将MultipleChoiceField与CheckboxSelectMultiple小部件一起使用,并将选项作为选项:

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

还看到: 在Django中有没有办法将选项显示为复选框?