2010-02-03 62 views
3

我是jquery的初學者,請耐心等待。 我有一個jQuery的功能,可以讓我選擇多個複選框,並創建一個字符串,如下所示:jquery和Django複選框

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字符串沒有被處理,只有一半。

請幫幫我!謝謝

+0

你可以使用'$(「input [name ='checks']:checked」)。each'來縮短你的每個函數並刪除if語句。 – rahul 2010-02-03 10:40:06

回答

7

從我看到的,你這樣做。您應該在所有複選框上設置相同的名稱。我不知道你爲什麼通過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。

+0

謝謝! 但是我再次卡住:(我試圖發送上述代碼中的「過濾器」作爲POST數據到Django,但我無法弄清楚正確的dataType。發佈此數據的正確方法是什麼,以便django看到列表它可以迭代嗎? – spyder 2010-02-03 21:43:21

+0

對不起,在服務器端代碼中有一些問題。 – spyder 2010-02-10 20:11:41

2

首先,我不知道您是否需要將複選框值操作爲像您正在操作的字符串。如果你爲它們分配相同的名稱屬性,http(或jQuery的)序列化將爲你做。

在Django端使用getlist來獲取列表,[]訪問器只獲取參數列表中的最後一個值。

但是,默認處理Http不會通過未選中的複選框的值發送,因此您可能希望構建一些比較您構建的複選框與您獲取的數據的檢查。

由於Gavoja說以上,Django的形式可能是這方面的一個很好的答案: 具體來說,要使用MultipleChoiceField與CheckboxSelectMultiple配件和選擇,因爲你的選擇:

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

還看到: In Django is there a way to display choices as checkboxes?