2010-02-03 4 views
3

Я новичок в jquery, поэтому, пожалуйста, несите меня. У меня есть функция JQuery, что позволяет мне выбрать несколько флажков и создать строку следующим образом:JQuery и Django несколько checkbox

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; 
} 

Я затем вызвать функцию просмотра Джанго и передать строку следующим образом:

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

}); 

On The server У меня есть функция удаления, которая выполняет итерацию над значениями флажка и манипулирует списком.

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

ответ

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, но я не могу понять правильный тип данных. Каков правильный способ опубликовать эти данные, чтобы django увидел список который он может повторить? – spyder

+0

Извините, исправлено, возникла проблема с кодом сервера. – spyder

2

Во-первых, я не знаю, нужно ли манипулировать значениями флажка в строку, как вы делаете. если вы присвоите им один и тот же атрибут имени, сериализация http (или jQuery) сделает это за вас.

На стороне Django используйте getlist для захвата списка, аксессор доступа [] получает последнее значение в списке параметров.

Однако обработка по умолчанию Http не передает значения флажков, которые не отмечены, поэтому вы можете захотеть создать некоторые проверки, которые сравнивают флажки, которые вы создаете, и данные, которые вы возвращаете.

Как Gavoja говорит выше, Джанго форма, вероятно, хороший ответ на это: В частности, вы хотите использовать MultipleChoiceField с CheckboxSelectMultiple виджетом и выбор, как ваши варианты:

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

также посмотреть: In Django is there a way to display choices as checkboxes?

Смежные вопросы