2012-09-11 117 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(); 
    }); 

})(); 
相關問題