这里是代码,我在函数里面有一个菜单全局变量。我想在它之外使用它,但后来我得到一个“未定义的引用错误......” 这是我唯一的javascript代码,因此不会干扰其他变量或函数。
提前致谢。
$(function() {
menu = $('nav#menu').mmenu(
{
navbars: [
{
position: "top",
height : 1,
content : [
'<a href="#/" class="fa fa-phone"></a>',
'<img src="imagenes/wheel32.png" /><p class="navbartxt">bicimap.uy</p>',
]
},
{
position: "bottom",
content: [
'<a class="fa fa-envelope"></a>',
'<a class="fa fa-twitter"></a>',
'<a class="fa fa-facebook"></a>'
]
}
],
extensions: ["multiline"],
onClick: {
close: false
},
navbar:{
title: "Inicio"
},
offCanvas: {
zposition : "next"
}
});
});
我需要将它放在函数中以使其正常工作
var API = $("#menu").data( "mmenu" );
menu.on( 'click', 'a[class^="fa fa-twitter"]', function() {
$('#twitter').show();
var API = $("#menu").data( "mmenu" );
API.close();
return false;
});
答案 0 :(得分:1)
我在这里缺少一些背景(我假设还有更多我们看不到的东西?)
但在menu.on( 'click'…
内的代码运行之前,您可能正在执行后一个代码段$(…)
(在dom ready上);所以menu
将是未定义的。
如果您刚开始使用,则值得查看浏览器的开发人员工具并了解断点和日志记录。
您需要确保仅在设置menu
之后才使用$
,可能会将所有调用推迟到准备状态。
执行订单
调用API
并将该函数作为第一个也是唯一的参数提供。函数本身不会被调用。
$("#menu"
由data
的结果定义。根据您添加此脚本的html文件中的位置,可能会发现或未找到此内容。
对
on
方法
您尝试在menu
上致电$
,但仍未定义
稍后,您传递给return {
[CALL_API]: {
types: [ USER_REQUEST, USER_SUCCESS, USER_FAILURE ],
endpoint: `users/${login}`,
schema: Schemas.USER
}
}
的函数被调用,菜单最终被定义,最近才有用
答案 1 :(得分:0)
如果你的闭包/匿名函数是异步发生的,那么在计算其余代码时可能还没有完成工作。我需要更多的背景来确定它。
答案 2 :(得分:0)
这是我找到的解决方案,也许它不是最好的,因为它可能带来问题。由于某种原因,就绪功能不能如上所示工作,可能会有一些资产被预期。
menu = null;
$(function() {
menu = $('nav#menu').mmenu(
{
navbars : [{
position: "top",
height : 1,
content : [
'<img src="imagenes/wheel32.png" /><p class="navbartxt">bicimap.uy</p>',
]
},
{
position: "bottom",
content: [
'<a class="fa fa-envelope"></a>',
'<a class="fa fa-twitter"></a>',
'<a class="fa fa-facebook"></a>'
]
}
],
extensions: ["multiline"],
onClick: {
close: false
},
navbar:{
title: "Inicio"
},
offCanvas: {
zposition : "next"
}
});
});
$( window ).load(function() {
var API = $("#menu").data( "mmenu" );
menu.on( 'click', 'a[class^="fa fa-twitter"]', function() {
$('#twitter').show();
var API = $("#menu").data( "mmenu" );
API.close();
return false;
}
);
});