我对“;返回true"嵌套函数内部;t工作

My solutions to "return true;" inside a nested function aren't working

本文关键字:函数 内部 嵌套 工作 返回 true 我对 quot      更新时间:2023-09-26

我发布了一个被标记为重复的问题,因为这让我对在嵌套函数中发布return true;进行了一些研究。我现在了解了异步代码,但在编写解决方案时仍然有很大的困难。

最初导致我出现问题的代码是:

if($('input[name="lat"]').length){
// submit the form after checks have been made
    return true;
} else {
    e.preventDefault();
    geocode_clientside();
    setTimeout(function () {
        return true;
    }, 1000); // in milliseconds
}

经过大量阅读,我得到了这个:

var result = false;
if($('input[name="lat"]').length){
    // submit the form after checks have been made
    result = true;
} else {
    e.preventDefault();
    geocode_clientside();
    setTimeout(function () {
        result = true;
        // console log just to help me with debugging
        console.log('settimeout: ' + result);
    }, 1000); // in milliseconds
}
// console log just to help me with debugging
console.log('end: ' + result);
return result;

这显然不起作用,因为当输入[name="lat"]没有长度时,return result;返回"false"。当我编写新的解决方案时,我才明白这一点,感觉就像我绕了一大圈,回到了问题的开始。我现在完全理解为什么它会返回false,我不明白的是,解决方案会让我走到最后(而不是回到开始)。

我尝试了一些愚蠢的方法,那就是包装返回结果;在延迟函数中,这是一场灾难。

有人能帮我吗?

由于要进行表单提交,因此可以直接调用表单元素的submit方法。

因此,在else块中,您将阻止默认的表单提交,这将阻止单击时的表单提交。然后在计时器中,如果你想提交表单,你可以调用submit()方法(它不会调用提交处理程序)

$('form').submit(function () {
    var form = this;
    if ($('input[name="lat"]').length) {
        // submit the form after checks have been made
        return true;
    } else {
        e.preventDefault();
        geocode_clientside();
        setTimeout(function () {
            form.submit();
        }, 1000); // in milliseconds
    }
})

注意:根据您的评论,您使用的是地理定位api,因此不要依赖于超时来猜测何时完成,而是使用回调方法提交表单