Значение PHP $ _POST теряется при использовании JS .insertAfter () - PullRequest
1 голос
/ 28 марта 2012

У меня есть следующий код, который должен добавить поле в форму, если пользователь выбирает «Другое» из выпадающего списка. Однако использование этого кода перезаписывает значение раскрывающегося списка, поэтому при публикации формы $_POST['enquiry_source'] остается пустым.

Я сузил его до этой строки, которая вызывает у меня проблему, покупая добавление поля при любом изменении в раскрывающемся списке, а не только при выборе «Другое» -

$(field_to_append).insertAfter('#form-field-enquiry_source');

Я тоже пробовал $('#form-field-enquiry_source').after(field_to_append);, но результат был тот же.

$(function(){

    /** Looks for changes to the enquiry source dropdown */ 
    $('#form-field-select-enquiry_source').live('change', function(){

        /** Check the enquiry source */
        var enquiry_source = $('select[name="enquiry_source"]').val();      

        /**
         * Adds another field to the enquires form when the user selects 'Other' form the enquiry source dropdown
         */
        if(enquiry_source === 'other'){ // The user has selected other as the enquiry source, so lock the form

            var field_to_append = '<div id="form-field-enquiry_source_other" class="form-field float-left">'+
                '<label>Other<span class="required"></span></label>'+
                '<input name="enquiry_source" id="form-field-input-enquiry_source_other" />'+
                '</div>';

            $(field_to_append).insertAfter('#form-field-enquiry_source');

        } else {

            $('#form-field-enquiry_source_other').remove();

        }

    });

});

Есть идеи, что вызывает эту проблему?

Ответы [ 3 ]

1 голос
/ 28 марта 2012

Если у вас есть выбор с помощью name = enquiry_source, а затем вы объявляете вход с тем же именем, то на сервер публикуется только один элемент, в вашем случае поле ввода (только последний элемент публикуется), поэтому вы должны указатьполе другое имя

        var field_to_append = '<div id="form-field-enquiry_source_other" class="form-field float-left">'+
            '<label>Other<span class="required"></span></label>'+
            '<input name="enquiry_source_other" id="form-field-input-enquiry_source_other" />'+
            '</div>';
1 голос
/ 28 марта 2012

Я знаю, что это может показаться немного не по теме (но это не так).Вы можете изменить свой подход, имея скрытый div с уже имеющимся содержимым, тогда ваша проблема сводится к тому, что в зависимости от поля есть раскрывающийся список «показать / скрыть».

Хорошая часть этого - минификация javascriptчто длинные строки не могут быть уменьшены, вы сэкономите гораздо больше места, если будете делать это таким образом.

if(enquiry_source === 'other'){ // The user has selected other as the enquiry source, so lock the form
        $("#enquiry_source_other").show();
    } else {
        $("#enquiry_source_other").hide();
    }

Мне кажется, этот подход немного проще

1 голос
/ 28 марта 2012

Вы вставляете внутрь? Похоже, вы генерируете HTML-код, такой как

<form>something</form><input name=enquiry_source>

Может быть, вам нужно $ ('# form-field-enquiry_source'). Append ($ (field_to_append));

Я не знаю, что такое "# form-field-enquiry_source". Это форма?

...