jQuery: предотвращение, а затем и предотвращение отправки формы с использованием «живого» метода - PullRequest
4 голосов
/ 07 ноября 2010

Я пишу форму для вставки на веб-страницы клиентов, которая должна быть отправлена ​​с запросом AJAX для обработки. Затем, в зависимости от настроек клиента, я хочу либо отобразить победное сообщение «Форма успешно отправлена», либо перенаправить пользователя на мой сайт (отправив форму на мой сайт) для дополнительной обработки.

Я использую jQuery, чтобы попытаться заставить это работать. Моя стратегия заключается в том, чтобы поместить «живую» привязку к событию отправки в мою форму, что затем предотвращает отправку по умолчанию и отправляет сообщение jQuery, используя значения формы в качестве параметров для обработки на моем сайте. Если форма проходит проверку и определяет, что пользователь должен быть перенаправлен, отправка формы запускается снова, но на этот раз обработчик отправки возвращает true, что должно включить значение по умолчанию, верно? Он возвращает true (я проверил с оповещениями), но форма не отправлена. Вот пример кода:

<form id="myform">
    <!-- Elements in here -->
    <input type="submit" value="Submit" name="submit" id="submit">
</form>
<script>
    var handleSubmit = true;
    $("#myform").live('submit', function(){
        if (handleSubmit === true){
            $.post('http://example.org', $('#myform').serialize(), function(response){
                if (response.success){
                    if (response.redirect){
                        handleSubmit = false;
                        $('#myform').attr('action',response.redirect);
                        $('#myform').submit();
                    } else {
                        alert('success!');
                    }
                } else {
                    // replace form contents with response.html (the form w/ errors)
                }
            }, 'json');
            return false;
        } else {
            // submit form (default action)
            return true;
        }
    });
</script>

Я пробовал разные вещи, такие как помещение триггера отправки в setTimeout или использование 'bind' вместо использования live, но результат тот же.

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

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

Спасибо!

1 Ответ

1 голос
/ 07 ноября 2010

Проблема, с которой вы столкнулись, связана с элементом input:

<input type="submit" value="Submit" name="submit" id="submit">

Передача формы для перенаправления не удалась, поскольку имена элементов управления в элементе form представлены как свойства form в DOM и могут вызвать конфликты с исходными свойствами form. Подобные конфликты будут молчаливо проваливаться при запуске событий через функции событий jQuery. Изменение элемента input на следующее должно решить вашу проблему:

<input type="submit" value="Submit">

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...