jquery - 如何在 JavaScript 闭包中使用全局变量?
问题描述
我写了一个自定义菜单切换代码,如下所示:
var menu_trigger = $('.has-submenu > .nav-link');
menu_trigger.on('click', function(e) {
e.preventDefault();
var this_menu = $(this);
var this_menu_parent = this_menu.parent('.has-submenu');
var this_submenu = this_menu.find('.submenu');
if( this_menu_parent.hasClass('active') ) {
this_submenu.slideUp('500');
this_menu_parent.removeClass('active'); // <--- HERE
} else {
this_submenu.slideDown('500');
this_menu_parent.addClass('active'); // <--- AND, HERE
}
});
HTML 如下所示:
<li class="has-submenu active">
<a class="nav-link" href="#">Parent Menu</a>
<div class="submenu">
<a class="dropdown-item" href="/child-1">Child 1</a>
<a class="dropdown-item active" href="/child-2">Child 2</a>
<a class="dropdown-item" href="/child-3">Child 3</a>
</div>
</li>
与他们一起,我使用一些 CSS 来显示任何内容,并使用.active
类、显示块等。
它工作得很好。但是使用 CSS 方法,我实际上失去了滑动效果,你知道的。当.active
类消失时,CSS 触发,子菜单已经消失,所以没有可见的滑动效果。
它可以通过回调来slideUp()
轻松解决slideDown()
。所以我尝试了这个:
if( this_menu_parent.hasClass('active') ) {
this_submenu.slideUp('500', function() {
this_menu_parent.removeClass('active'); // <--- HERE
});
} else {
this_submenu.slideDown('500', function() {
this_menu_parent.addClass('active'); // <--- AND, HERE
});
}
但是正如您所看到的,该变量this_menu_parent
在闭包内没有正确调用,因此它不起作用。在 PHP 中,我们使用use
符号,例如function(use global_var) { return global_var * 30 }
,但这不适用于 JavaScript。
如何在 JavaScript 闭包中调用全局变量?
解决方案
推荐阅读
- python - Python 字典,值键映射
- javascript - 如何通过ajax post请求传递子对象
- java - 在 Spring Boot 中处理数据库
- excel - 将 Excel 文件另存为 .CSV 时未保存所需的日期格式
- vb.net - VB.net过滤访问数据库
- unity3d - 卸载应用程序时注销用户的最佳方法是什么?
- numpy - NumPy:如何使用“有损”变换来变换 ndarray 的形状
- django - Django 选择字段重命名第一个选项
- http - 应该返回什么状态码,如果文件,代表资源不在服务器上
- python-3.x - 在 Pandas Dataframe 列中查找某些单词,如果找到,将它们添加到新列中