Как я могу обновить опцию выбора в форме без потери ввода формы (Django + jQuery) - PullRequest
0 голосов
/ 29 января 2012

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

Мне удалось зарегистрировать его с помощью AJAX. Однако мне не удалось найти способ обновить выпадающий список, чтобы пользователь мог выбрать только что добавленное значение.

Я попытался location.reload(true), но это сотрет существующие входные данные формы. Можно ли мне просто обновить выпадающий список или обновить без потери входных данных?

Мой JQuery выглядит так

$('#formSupplier').submit(function(e){
    $('#divProcessingMessage').show();
    $('#divSupplierForm').hide();
    $.post('/item/xhr_reg_supplier/',$('#formSupplier').serializeArray(),        
        function(data){
            if(data){
                alert('Supplier registration successful')
                $('#divProcessingMessage').hide();
                $('#divSupplierForm').show();

                //Clear the form's field
                $('#formSupplier').find(':input').each(function(){
                    switch(this.type) {
                        case 'password':
                        case 'select-multiple':
                        case 'select-one':
                        case 'text':
                        case 'textarea':
                            $(this).val('');
                            break;
                        case 'checkbox':
                        case 'radio':
                            this.checked = false;
                    } 
                });

                $('#supplier_form').hide();
                location.reload(true);
            } else {
                alert('Supplier registration failed')
            }        
        }
    );

Я использую фреймворк django 1.3.1.

Ответы [ 2 ]

1 голос
/ 29 января 2012

Есть три способа сделать это:

document.getElementById('form_id').reset()

или

$('#FormID').each (function(){
  this.reset();
});

или

jQuery.fn.reset = function () {
  $(this).each (function() { this.reset(); });
}

$("#FormID").reset();
0 голосов
/ 29 января 2012

В представлении, которое обрабатывает AJAX-запрос, сделайте так, чтобы он повторно визуализировал поле формы и возвратил HTML. Затем в обратном вызове JS поменяйте его с помощью jquery: $('select[name="thefield"]').replaceWith(data). Возможно, вам придется повторно привязать события к вновь вставленному фрагменту DOM, если есть события страницы, которые запускаются при изменении раскрывающегося списка.

...