如何从jQuery中的另一个函数调用嵌套函数?

时间:2015-02-23 21:22:57

标签: javascript jquery

我浏览了这个网站,寻找帮助解决这个问题的线索,但它们并不具体,无法帮助解决这个问题。

我有这个登录代码,它有一个嵌套函数,我需要从登录脚本范围之外的另一个函数调用。

jstore.plugins.login = function(url, options) { 

    var login = jstore.plugins.login;
    var opts = $.extend(true, {}, jstore.plugins.login.defaults, options);
    var server = jstore.url2server({ url: url });

    return this.each(function() {
        var $this = $(this);
        var id = jstore.uid();
        $this.append('<div class=\'jstore_widget jstore_login\' id=\'' + id + '\'></div>');
        var updated = function(server) {
            var element = document.getElementById(id);
            if(element) {
                var e = $(element);
        var loginDisplayed = $('.jstore_login_name', element).length == 1;
        if (server.loggedIn() === false && loginDisplayed) {
            return true;
        }
        e.html(login.getHTML(server, opts));
        if(server.loggedIn()) {
           e.click(function() {
              var server = jstore.getServer(url);
              if(server && server.loggedIn()) {
                 server.logout();
              }
        });

我需要从其他地方调用此部分:

e.click(function() {
   var server = jstore.getServer(url);
   if(server && server.loggedIn()) {
      server.logout();}

基于该网站的研究;我尝试通过构造以下行直接调用它,但它不起作用:

jstore.plugins.login.updated().e.click();

我对jQuery几乎没有实际知识。记住我是新手;从语法上讲,从父函数范围之外的位置调用嵌套javascript函数的正确方法是什么?

问候。

::::::::::::: UPDATE ::::::::::::::

我能够让这个工作起来,非常感谢nuway的出色建议和其他人的建设性批评。

以下是我最终的结果:

jstore.plugins.login = function(url, options) { 

var login = jstore.plugins.login;
var opts = $.extend(true, {}, jstore.plugins.login.defaults, options);
var server = jstore.url2server({ url: url });

return this.each(function() {
    var $this = $(this);
    var id = jstore.uid();
    $this.append('<div class=\'jstore_widget jstore_login\' id=\'' + id + '\'></div>');

    window.onClick = function() {
        var server = jstore.getServer(url);
        if(server && server.loggedIn()) {
            server.logout();
            }
        };

    var updated = function(server) {
        var element = document.getElementById(id);
        if(element) {
            var e = $(element);
            var loginDisplayed = $('.jstore_login_name', element).length == 1;
        if (server.loggedIn() === false && loginDisplayed) {
            return true;
            }
            e.html(login.getHTML(server, opts));
        if(server.loggedIn()) {
           e.click(onClick);
        }

我只需要使用window.onClick = ...全局化onClick函数,以便从另一个函数调用它。

1 个答案:

答案 0 :(得分:1)

为什么不把这个块放到它自己的函数中,比如

var onClick = function() {
    var server = jstore.getServer(url);
    if(server && server.loggedIn()) {
          server.logout();
    }
}

然后你就可以这样传递它:

e.click(onClick)

您可以通过简单地调用onClick()

从其他地方调用它
相关问题