Подтвердить что ты не робот

JQuery: форма не отправляется с $( "# id" ). submit(), но будет отправляться с помощью кнопки "отправить"?

<form method="post" action="load_statements.php?action=load" id="loadForm"
                            enctype="multipart/form-data">

Это моя форма, которая выглядит хорошо для меня. в этой форме я поставлю эту кнопку:

<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />

вот функция, которую он вызывает:

function confirmSubmit() {
    // get the number of statements that are matched
    $.post(
        "load_statements.php?action=checkForReplace",
        {
            statementType : $("#statementType").val(),
            year : $("#year").val()
        },
        function(data) {
            if(data['alreadyExists']) {
                if( confirm("Statements already exist for " + $("#statementType").html() + " " + $("#year").val() +
                    ". Are you sure you want to load more statements with these settings? (Note: All duplicate files will be replaced)"
                )) {
                    $("#loadForm").submit();
                }
            } else {
                $("#loadForm").submit();
            }
        }, "json"
    );
}

и, как вы можете видеть, он вызывает $("#loadForm").submit();, но форма не отправляется (т.е. страница не освежает). почему это?

спасибо!

4b9b3361

Ответ 1

http://api.jquery.com/submit/

Событие jQuery submit() добавляет прослушиватель событий, когда вы отправляете форму. Таким образом, ваш код практически не связан с событием отправки. Если вы хотите, чтобы эта форма была отправлена, вы используете JavaScript старой версии (document.formName.submit()).

изменить:

Я оставляю свой оригинальный ответ неповрежденным, чтобы указать, где я был (как по крайней мере, два человека уже отказали мне). Что я хочу сказать, это то, что если у вас есть такая функция, это путает, почему вы отправляете значения в части ajax, а затем используете jQuery для отправки формы. В этом случае я бы привязал событие к нажатию кнопки, а затем вернул true, если вы хотите, чтобы он вернулся, в противном случае верните false, например

$('#submit').click( function() {
  // ajax logic to test for what you want
  if (ajaxtrue) { return confirm(whatever); } else { return true;}
});

Если эта функция возвращает значение true, она считается успешным нажатием кнопки отправки и происходит обычное поведение браузера. Затем вы также отделили логику от разметки в форме обработчика событий.

Сделать больше смысла?

Ответ 2

Измените кнопку "отправить" на другое. Это вызывает проблему. См. Ответ dennisjq: http://forum.jquery.com/topic/submiting-a-form-programmatically-not-working

См. документацию jQuery submit():

Формы и их дочерние элементы не должны использовать входные имена или идентификаторы, которые конфликтуют со свойствами формы, такими как submit, length или method. Конфликты имен могут вызывать запутывающие сбои. Полный список правила и проверить свою разметку для этих проблем, см. DOMLint.

Ответ 3

Я использую $("form")[0].submit()

здесь $("form") возвращает массив элементов DOM, поэтому, обратившись к соответствующему индексу, мы можем получить объект DOM для элемента формы и выполнить функцию submit() внутри этого элемента DOM.

Откат назад, если у вас есть несколько элементов формы на одной странице html, вы должны иметь представление о правильном порядке "формы"

Ответ 4

У меня была аналогичная проблема, потребовалось некоторое время, чтобы понять это. Функция jQuery.submit() должна инициировать отправку формы, если вы не передаете ей обработчик, но причина, по которой это не так, заключается в том, что ваша кнопка отправки называется "отправить" и переопределяет функцию отправки формы.

то есть. jQuery вызывает функцию <form>.submit() объекта DOM, но все входные данные в форме также могут быть доступны, вызывая <form>.<inputname>. Поэтому, если один из ваших входов называется "submit", он переопределяет функцию <form>.submit() с помощью <form>.submit - являющегося элементом DOM ввода... если это имеет смысл? Поэтому, когда jQuery вызывает <form>.submit(), это не работает, потому что submit больше не является функцией. Итак, если вы измените имя своей кнопки, оно должно работать.

Не знаю, почему консоль не регистрирует ошибку, возможно, jQuery сначала проверяет, существует ли функция отправки, и просто игнорирует запрос, если функция не существует.

Ответ 5

я добавил невидимую кнопку отправки в форму и вместо вызова функции submit() я вызываю функцию click() на кнопке submit =)

кнопка: <div style="display:none"><input id="alternateSubmit" type="submit" /></div>

безумный способ обойти форму представления: $("#alternateSubmit").click();

Ответ 6

стереть атрибут "имя" в вашей кнопке отправки:

это ваш код:

<input type="button" name="submit" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />

должен выглядеть следующим образом:

<input type="button" id="submit" value="Submit" onclick="confirmSubmit()" class="smallGreenButton" />

Ответ 7

Похоже, что у вас есть передача в обратном вызове, которая выполняется только после сообщения ajax в обработчике onclick.

Другими словами, когда вы нажимаете кнопку "Отправить", браузер должен сначала выйти и нажать действие checkForReplace.

Ответ 8

его вызов Ajax, почему вам нужно отправить форму, пока вы ее обрабатываете с помощью ajax. Вы можете перейти от страницы с помощью

window.location.href = "/somewhere/else";