Форма не отправляется при запуске функции submit () в jQuery - PullRequest
3 голосов
/ 25 августа 2010

У меня есть форма со следующим HTML-кодом:

    <form id="course_edit_form" name="course_form" action="/courses/save" method="post">
    <fieldset>
    <div id="side-left">
        <!-- Course Name -->
        <input type="hidden" id="course_id" name="course_id" value="${c.the_course.id}" />
        <div>
            <label for="name" id="name_label">Course name<em>*</em></label>
            ${h.tags.text("name", c.the_course.name, size=40)}
        </div>

        <!-- Event Type -->
        <div>
            <label for="type_list" id="class_type_label">Event type</label>
            <p>Use Ctrl to do multi-select</p>
            <select multiple="multiple" id="type_list" class="type-box required" name="type_list">
            % for ty in c.all_types:
                % if int(ty.id) in c.typeids:
                <option selected="selected" value="${int(ty.id)}">${str(ty.name)}</option>
                % else:
                <option value="${int(ty.id)}">${str(ty.name)}</option>
                % endif
            % endfor
                <option value="all">All</option>
            </select>
        </div>
        <div>....more input fields here</div>
    </div>
    <!-- Controls -->
    <div class="controls">
        <input id="delete" name="delete" type="button" value="Delete" />
        <input id="submit" name="submit" type="submit" value="Update" />
    </div>
    </fieldset>
</form>

Я прикрепил обработчик кликов к кнопке отправки, чтобы мой javascript сначала проверил мою форму перед отправкой действительной формы.Если все пройдет хорошо во время проверки, я установлю флаг "course_form_valid" в значение true.В последних двух строках моего JavaScript у меня есть:

if (course_form_valid) {
    jQuery('#course_edit_form').submit();
}

Тем не менее, приведенная выше строка никогда не отправляет форму, даже если course_form_valid имеет значение true.Я даже попытался удалить атрибуты action и method из моей формы и использовал вместо этого javascript ниже, но все равно это не сработало бы:

        if (course_form_valid) {
        jQuery('#course_edit_form').submit(function() {
        jQuery.ajax({
            url: '/courses/save',
            type: 'GET',
            data: jQuery('#course_edit_form').serialize(),
            async: false
        });
        });
    }

Что происходит?Может кто-нибудь, пожалуйста, помогите мне?

-Mark

Ответы [ 4 ]

1 голос
/ 25 августа 2010

Я исправил вышеуказанную проблему, удалив e.preventDefault () и изменив последние несколько строк кода JS на:

        if (course_form_valid) {
        jQuery.ajax({
            url: '/courses/save',
            type: 'GET',
            data: jQuery('#course_edit_form').serialize(),
            async: false
        });
    }

Спасибо всем за помощь и быстрое время отклика. Не могли бы вы сделать это без вас, ребята.

1 голос
/ 25 августа 2010

Попробуйте,

if (course_form_valid) {
    $('#course_edit_form').submit(function() {
         return true;
    });
}
1 голос
/ 25 августа 2010

То, что происходит, это то, что вы должны проверить его в течение всего времени, пока пользователь отправляет форму, тогда вы можете вернуть true или false в зависимости от проверки.

уничтожить if statement. Напишите только это:

jQuery('#course_edit_form').submit(function() {
if (course_form_valid) {
     return false; // It prevents form submition
}
jQuery.ajax({
 url: '/courses/save',
 type: 'GET',
 data: jQuery('#course_edit_form').serialize(),
 async: false
});
});
1 голос
/ 25 августа 2010

Сначала я бы сделал это в Firefox с плагином Firebug . Убедитесь, что в консоли появляются HTTP-запросы, а затем повторите попытку. Что ты видишь? Был ли сделан запрос? Если запрос не был сделан, то отправка никогда не будет достигнута. Если есть отправка, есть ли последующая ошибка? Это ошибка 404? Если это так, убедитесь, что /courses/save существует. Если это ошибка 500, это означает, что форма отправляется, но у вас проблема с кодом на стороне сервера. Firebug должен вернуться с ошибкой, которую публикует ваш сервер, что поможет вам отлаживать оттуда.

Кроме того, убедитесь, что, если вы «POST» заполняете форму, ваш внутренний код настроен на получение POST.

Это, вероятно, должно вывести вас на правильный путь!

...