Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当满足某个条件时,如何在jQuery.on()函数中退出函数_Javascript_Jquery - Fatal编程技术网

Javascript 当满足某个条件时,如何在jQuery.on()函数中退出函数

Javascript 当满足某个条件时,如何在jQuery.on()函数中退出函数,javascript,jquery,Javascript,Jquery,我有以下javascript/jquery代码 我是javascript新手,如果这个问题非常容易解决,我向您道歉。 我想退出此功能。如果服务器上出现错误或没有找到密钥,请单击此功能。点击绑定会触发表单上的post请求,所以如果这两个条件都不满足,我想继续运行它。我检查了其他示例,并尝试了许多方法,如返回、停止播放等 我该怎么做?我试着返回;并返回false;但它仍会刷新页面并在表单上激发post请求 我做错了什么 $( document ).ready(function() { va

我有以下javascript/jquery代码

我是javascript新手,如果这个问题非常容易解决,我向您道歉。 我想退出此功能。如果服务器上出现错误或没有找到密钥,请单击此功能。点击绑定会触发表单上的post请求,所以如果这两个条件都不满足,我想继续运行它。我检查了其他示例,并尝试了许多方法,如返回、停止播放等

我该怎么做?我试着返回;并返回false;但它仍会刷新页面并在表单上激发post请求

我做错了什么

$( document ).ready(function() {

    var validation = false;
    $('#submitform').on('click', function(e) {

        if (validation === true) {
            validation = false; // reset flag
            return;// let the event bubble away
        }

        if ($('#street_number') == "" && $('#route') == "" && $('#lat') == "" && $('#lon') == ""
                && $('#administrative_area_level_1') == "") {
            alert("Unknown Address");
            validation = false;
            e.preventDefault();
            return false;
        }
        else {
            var data_dict = {
                // Number
                'street_number': $('#street_number').val(),
                // Address
                'address': $('#route').val(),
                // City
                'city': $('#locality').val(),
                // postal code
                'postal_code': $('#postal_code').val(),
                // State
                'state': $('#administrative_area_level_1').val(),
                // Country
                'country': $('#country').val()
            };
            $.ajax({
                url: '/zillow_check/',
                data: data_dict,
                method: 'POST'
            }).then(function (response) {
                console.log("Checking for Zillow ID...");
                if (response.error) {
                    console.error("There was an error " + response.error);
                    $('.dashboard-main__appartment--input').addClass('serverError');
                    validation = false;
                    e.stopImmediatePropagation();
                    return;
                } else {
                    console.log("Zillow key: " + response);
                    if (response == 'No zillow ID found.') {
                        // You can change this to whatever you like.
                        alert("Can't add this object. It does not exist on Zillow. Check the Address and try again.");
                        validation = false;
                        e.stopImmediatePropagation();
                        return;

                    }
                    else if (isNaN(response) == false ) {
                        validation = true;
                        $('#propertyform').submit()
                    }
                }

            });

        }
    });
});

您需要立即防止所有情况下的默认设置

Ajax是异步的,所以你不能等到它完成后再尝试阻止默认设置,那就太晚了

$('#submitform').on('click', function(e) {
    e.preventDefault();
    // no need for other instances of preventDefault() beyond here or for `stopImmediatePropagation()`

    // your other code

})

我已经尝试过这个解决方案。不幸的是,在我将e.prevent设置为默认值后,它没有提交表单;你建议的地方。我是否必须以不同的方式处理这种情况?您正在使用$propertyform.submit在ajax成功回调中提交它。如果这不起作用,那么您需要调试其他条件。我已将console.log语句添加到该else块中,它会正确激发该语句,但它不会提交表单。如果我删除e.preventDefault,它会工作,但在这种情况下,其他条件仍然提交表单,这使我们回到原来的问题。