jQuery: performing some action before form is submitted

前端 未结 1 706
迷失自我
迷失自我 2021-01-21 04:29

I have a page with a single form on it. The form contains a text box and a submit button.

When the form is submitted, either by clicking the button, or by pressing enter

相关标签:
1条回答
  • 2021-01-21 04:51

    event.preventDefault() is your friend here. You are basically experiencing the same problem as here. The form is submitted before the actual ajax request can be done. You need to halt the form submission, then do the ajax, and then do the form submission. If you don't put some stops in there, it'll just run through it and the only thing it'll have time to do is to submit the form.

     $(document).ready(function () {
            $("form").submit(function (event) {
    
    // prevent default form submit
        event.preventDefault();
                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();
                    }
                });
            });
        });
    

    Howevern, when you put the preventDefault in there you can't continue the form submission with $('form').submit(); anymore. You need to send it as an ajax request, or define a conditional to the preventDefault.

    Something like this perhaps:

    $(document).ready(function () {
    
        var submitForReal = false;
            $("form").submit(function (event) {
    
                var postcode = $.trim($("#Postcode").val());
                if (postcode.length === 0) {
                    return false;
                }
        // prevent default form submit
        if(!submitForReal){
        event.preventDefault();
        }else{
    
    
    
                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]);
                        submitForReal = true;
                        $("form").submit();
                    }
                });
              }
            });
        });
    
    0 讨论(0)
提交回复
热议问题