JQuery: выполнение некоторых действий перед отправкой формы - PullRequest
3 голосов
/ 29 мая 2011

У меня есть страница с одной формой.Форма содержит текстовое поле и кнопку отправки.

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

Мой текущий подход заключается в добавлении обработчика для события submit в единственную форму и вызове submit (), когда я закончил, но я не могу заставить это работать, и не смог отладить проблему:

$(document).ready(function () {
    $("form").submit(function (event) {
        var postcode = $.trim($("#Postcode").val());
        if (postcode.length === 0) {
            return false;
        }

        var baseUrl = "http://dev.virtualearth.net/REST/v1/Locations/UK/";
        var apiKey = "myKey";
        var url = baseUrl + postcode + "?key=" + apiKey + "&jsonp=?";
        $.getJSON(url, function (result) {
            if (result.resourceSets[0].estimatedTotal > 0) {
                var location = result.resourceSets[0].resources[0].point.coordinates;
                $("#latitude").val(location[0]);
                $("#longitude").val(location[1]);
                $("form").submit();
            }
        });
    });
});

1 Ответ

5 голосов
/ 29 мая 2011

event.preventDefault() ваш друг здесь.Вы в основном испытываете ту же проблему, что и здесь .Форма отправляется до того, как будет выполнен фактический запрос ajax.Вам необходимо остановить отправку формы, затем выполнить ajax, а затем выполнить отправку формы.Если вы не ставите там некоторые остановки, он просто пройдет через него, и единственное, что у него будет время, - это отправить форму.preventDefault там вы не можете продолжить отправку формы с $('form').submit();.Вам нужно отправить его как запрос ajax или определить условие для preventDefault.

Возможно, что-то вроде этого:

...