2009-07-11 21 views
3

我想了解如何使用firebug來調試我的Javascript。所以我有下面列出的HTML。我想在var的''上設置一個監視表達式。我去了螢火蟲的腳本選項卡,打開監視窗格,進入小號成說:「新腕錶表達」的區域。在Firebug中設置手錶表達式:ReferenceError - s沒有定義

我得到一個錯誤:

ReferenceError: s is not defined 

爲什麼?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 

<style type="text/css"> 
.StateOne .InitiallyHidden { display: none; } 
.StateTwo .InitiallyVisible { display: none; } 
</style> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
<script language="javascript" type="text/javascript"> 
    $(document).ready(function() 
    { 

     $('.x').click(function() { 
       var s = $("#StateContainer")[0]; 
       s.className = (s.className == 'StateOne' ? 'StateTwo' : 'StateOne'); 
     }); 

    }); 
</script> 





</head> 

<body> 

<button class="x">Change StateContainer</button> 

<div class="StateOne" id="StateContainer"> 
    <div class="InitiallyVisible">Visible first</div> 
    <div class="InitiallyHidden">Visible second</div> 
    <div class="InitiallyVisible">Visible first</div> 
    <div class="InitiallyHidden">Visible second</div> 
    <div class="InitiallyVisible">Visible first</div> 
    <div class="InitiallyHidden">Visible second</div> 
    <div class="InitiallyVisible">Visible first</div> 
    <div class="InitiallyHidden">Visible second</div> 
</div> 



</body> 
</html> 

回答

6

變量's'僅在'x'的點擊處理程序內定義,因爲它在函數中聲明。如果你在點擊函數中設置了斷點,那麼's'將起作用。

這通常不是好的做法,以創建全局變量,但對於調試你可以做的'一個全局變量通過聲明它之外的$(文件)。就緒()函數,像這樣的緣故:

<script language="javascript" type="text/javascript"> 
    var s; 
    $(document).ready(function() 
    { 

     $('.x').click(function() { 
       s = $("#StateContainer")[0]; 
       s.className = (s.className == 'StateOne' ? 'StateTwo' : 'StateOne'); 
     }); 

    }); 
</script>