javascript - Javascript / Jquery 脚本因超时而终止
问题描述
所以作为一个 python 人,我正在试验 JS 和 Jquery。我编写了这个小脚本来使用 Jquery 幻灯片折叠 \ 展开 html 页面上的菜单栏。我相信这应该可以正常工作,但是它所做的只是将我的浏览器冻结大约 10 秒,然后在控制台中我得到“脚本因超时而终止”。任何人都可以指出我正确的方向吗?
$(document).ready(function(){
var Clicked = false;
while (true) {
if (Clicked) {
$("button").click(function(){
$("#menu").slideDown();
$("button").replaceWith("<button type=\"button\">↑</button>");
Clicked = false;
});
} else {
$("button").click(function(){
$("#menu").slideUp();
$("button").replaceWith("<button type=\"button\">↓</button>");
Clicked = true;
});
}
}
});
解决方案
问题是由于while()
循环。在 JS 中,这是一个同步操作,它会阻塞所有其他线程(包括重要的 UI 渲染器),这会导致浏览器挂起。这就是为什么您会看到提示操作已终止的警报。
一个更好的方法是只使用一个事件处理程序来切换状态和单击其中#menu
的文本。button
尝试这个:
$(function() {
$("button").click(function() {
$("#menu").slideToggle();
$(this).html(function(i, h) {
return h === '↑' ? '↓' : '↑';
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button">↓</button>
<div id="menu">
Menu...
</div>
推荐阅读
- javascript - 如何创建一个随机更改标题颜色的按钮?
- c++ - 当 B 是犰狳中的对称矩阵时的 A * B 计算
- jquery - jQuery 3.2.1 - delegate() - 动态创建的按钮,delegate() 在整个文档而不是元素上触发
- python - 错误更改 /usr/ 权限后的“std::bad_alloc”
- maven - 常见依赖安装覆盖失败
- powershell - 在 powershell/powercli 中使用 invoke-vmscript 时的多线程 foreach 循环
- vb.net - 迁移 VB 项目后的 Nuget Catch 22
- c# - 实体框架/基础存储库类 - 添加重复检查
- apache-spark - 通过 sparklyr 连接到另一个 Spark 集群时是否需要本地版本的 Spark?
- ios - 以与 iPhone 相同的方式截屏 iOS 模拟器(但不保存到桌面)