2011-05-09 57 views
2

我想實現一個jQuery'滑動切換'。在頁面的頂部(在頭)我已經包括:不能調用未定義的方法'點擊'

<script src="http://code.jquery.com/jquery-latest.js"></script> 

那麼該地區的代碼是:

<a href="#" id="morebutton" class="more">More</a> 
<div class="toggler"> 
<div id="morepanel" class="ui-widget-content ui-corner-all"> 
    <p>Text</p> 
    </div> 
</div> 

<script src="js/toggle.js" type="text/javascript"></script> 

的toggle.js包含:

$('#morebutton').click(function() { 
$('#morepanel').slideToggle('slow', function() { 
    // Animation complete. 
}); 
}); 

當我點擊它時,出現以下錯誤:

Toggle.js:1Uncaught TypeError: Cannot call method 'click' of undefined.

I根本無法弄清楚該做什麼。 divs嵌套在其他divs和內容持有者等中,但我不明白爲什麼這會是一個問題。

+0

您是否正在頭元素中運行腳本?然後你需要把它包裝在一個'ready()'事件 – 2011-05-09 10:50:10

回答

4

您應該將代碼包裝在$(function() {});聲明中。這將確保在DOM加載之後它將執行

當前,您的代碼在DOM完全構建之前正在執行,從而導致對尚不存在的DOM元素的引用。

例子:

$(function() { 
    $('#morebutton').click(function() { 
     $('#morepanel').slideToggle('slow', function() { 
      // Animation complete. 
     }); 
    }); 
}); 
+0

謝謝你的迴應。我已經用它包裹了它,儘管我確信這使我更靠近它,因爲它不再有錯誤,它也不再有任何斷點,並且看起來什麼都不做。還有什麼建議? – 2011-05-09 11:47:58

0

這似乎是 '#morebutton' 實際上沒有任何選擇。

您是否試過用Firebug或IE/Chrome等效物放置斷點並從控制檯運行選擇器?

+0

雖然正如Aron所說,這可能是因爲腳本在DOM加載之前運行! – 2011-05-09 10:51:16

+0

使用艾倫的建議後,它不再符合我設定的斷點。 – 2011-05-09 11:48:30

1

jQuery現在可能沒有加載。把你的電話打包成這樣:

$(document).ready(function() { 
    $('#morebutton').click(function() { 
    $('#morepanel').slideToggle('slow', function() { 
     // Animation complete. 
    }); 
    }); 
}) 
+0

我得到的問題'toggle.js:1Uncaught TypeError:Obkect#沒有方法'準備好'。如果我只是寫'$(function(){'那麼它會選中它,儘管現在它沒有錯誤,也沒有工作。 – 2011-05-09 11:40:35

+0

這聽起來很像它沒有加載JQuery或有衝突;你不是使用Prototype或任何其他的JavaScript框架是嗎? – 2011-05-09 14:48:29

+0

不,這是唯一的JQuery在頁面上。甚至沒有其他的JavaScript。當然沒有使用$。 – 2011-05-09 16:20:46

相關問題