是否允许JS嵌套回调?

时间:2017-11-30 16:07:33

标签: javascript jquery

我正在尝试为JS回调运行w3schools示例,它在第一次回调时运行正常并显示“段落现在已隐藏正常”,但不是第二次警报,我做错了什么?或者是否允许嵌套回调?

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){    
        $("p").hide("slow", function(){        
            alert("The paragraph is now hidden OK", function(){            
                 alert("2nd alert FAIL");
            });
        });
    });
});

</script>
</head>
<body>

<button>Hide</button>

<p>This is a paragraph with little content.</p>

</body>
</html>

编辑1:
我需要做什么才能支持我的自定义函数回调?
编辑2
已解决,仅支持功能回调:

​// A function that takes two parameters, the last one a callback function​
​function getInput (options, callback) {
    allUserData.push (options);
    callback (options);
​
}

3 个答案:

答案 0 :(得分:4)

alert没有提供回调功能。 alert是一个20世纪90年代的时代错误,它使得浏览器的主要JavaScript线程在警报显示时突然停止,因此在特定情况下,只需将您当前拥有的代码放入回调 alert。 (或者更好的是:不要使用alert。:-))alert(以及promptconfirm)是整体&#34;的不合时宜的例外情况。不要阻止线程&#34;规则。

没有理由其他回调也是嵌套的,不会起作用。确实他们这样做:

&#13;
&#13;
$(document).ready(function(){
    $("button").click(function(){    
        $("p").hide("slow", function(){        
            alert("The paragraph is now hidden OK");
            alert("2nd alert FAIL");
        });
    });
});
&#13;
<button>Hide</button>
<p>This is a paragraph with little content.</p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

alert()方法无法接受函数。只能显示字符串或对象。见here

答案 2 :(得分:0)

允许嵌套回调,但通常不鼓励(使代码更难以阅读)。

但问题是,alert不接受回调,只需要一个参数(参见https://www.w3schools.com/jsref/met_win_alert.asp

此代码应该有效:

$(document).ready(function(){
    $("button").click(function(){    
        $("p").hide("slow", function(){        
            alert("The paragraph is now hidden OK");
            alert("2nd alert FAIL");
        });
    });
});