javascript中的全局变量无法按预期工作

时间:2016-01-23 00:14:05

标签: javascript

这里是代码,我在函数里面有一个菜单全局变量。我想在它之外使用它,但后来我得到一个“未定义的引用错误......” 这是我唯一的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;
});

3 个答案:

答案 0 :(得分:1)

我在这里缺少一些背景(我假设还有更多我们看不到的东西?)

但在menu.on( 'click'…内的代码运行之前,您可能正在执行后一个代码段$(…)(在dom ready上);所以menu将是未定义的。

如果您刚开始使用,则值得查看浏览器的开发人员工具并了解断点和日志记录。

您需要确保仅在设置menu之后才使用$,可能会将所有调用推迟到准备状态。

执行订单

  1. 调用API并将该函数作为第一个也是唯一的参数提供。函数本身不会被调用。

  2. $("#menu"data的结果定义。根据您添加此脚本的html文件中的位置,可能会发现或未找到此内容。

    < / LI>
  3. 的结果调用on方法
  4. 您尝试在menu上致电$,但仍未定义

  5. 稍后,您传递给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;
                    }
         );

});