2012-09-11 73 views
0

这是我的jQuery代码,它不起作用。我真的不知道为什么。请帮助,并告诉我如何解决它。我的jQuery代码不起作用。为什么?

$(function() { 
    var panel = function() { 
      var init = function() { 
       console.log('hello'); 
      }; 

     return { 
      init: init 
     } 
    }; 

    $('.nav li a').on('click', function (e) { 
     panel.init(); 
    }); 

})(); 

我得到这个错误在我的控制台

Object function() { 
    var panel = function() { 
     var init = function() { 
      console.log('hello'); 
     } 
    }; 

    return { 
     init: init 
    } 
} has no method 'init' 
+0

什么是你的HTML是什么样子?你会得到什么错误? – Asciiom

+1

为什么你有两个同名的函数? “panel” –

+2

'init'是'panel.panel'的成员,但不是'panel'。 – VisioN

回答

0

我认为你缺少关闭面板功能的声明结束的括号内。

var panel = function() { 
    var panel = function() { 
     var init = function() { 
      console.log('hello'); 
     } 
    }; 

    return { 
     init: init 
    } 
}(); 

确保右括号后面()

0

你的初始化函数是在另一个功能面板。这是从外面无法到达的。 当你想返回init方法时,如果你知道我的意思,那么你必须把init函数的级别设置得更高。

0

我猜面板应该使用即时调用:

$(function() { 
    var panel = (function() { 
      var init = function() { 
       console.log('hello'); 
      }; 

     return { 
      init: init 
     } 
    })(); 

    $('.nav li a').on('click', function (e) { 
     panel.init(); 
    }); 

})(); 

代码将立即执行并将对象返回到panel变量。因此panel拿起init财产。

0

我只想做:

$(function() { 
    var panel = { 
     init: function() { 
      console.log('hello'); 
     } 
    } 

    $('.nav li a').on('click', function (e) { 
     panel.init(); 
    }); 
});​ 

FIDDLE

似乎更像是你想做什么?

0

在这种情况下,面板是一个回调,而这种回调返回其他回调,init,所以你必须把()回调都围绕,试试这个:

$(function() { 
    var panel = function() { 
     var init = function() { 
      console.log('hello'); 
     }; 

     return { 
      init: init 
     } 
    }; 

    $('.nav li a').on('click', function (e) { 
     panel().init(); 
    }); 

})(); 
相关问题