2009-09-07 213 views
-1

function menuhover(id,state){ 
    if(id=="home"){ 
     if(state=="over"){ 
      document.getElementById(id).src="pages/styles/images/home1hover.png"; 
     } else if(state=="out"){ 
      document.getElementById(id).src="pages/styles/images/home1.png"; 
     } 
    } else if(id=="news"){ 
     if(state=="over"){ 
      document.getElementById(id).src="pages/styles/images/news2hover.png"; 
     } else if(state=="out"){ 
      document.getElementById(id).src="pages/styles/images/news2.png"; 
     } 
    } else if(id=="register"){ 
     if(state=="over"){ 
      document.getElementById(id).src="pages/styles/images/register3hover.png"; 
     } else if(state=="out"){ 
      document.getElementById(id).src="pages/styles/images/register3.png"; 
     } 
    } else if(id=="contrib"){ 
     if(state=="over"){ 
      document.getElementById(id).src="pages/styles/images/contributor4hover.png"; 
     } else if(state=="out"){ 
      document.getElementById(id).src="pages/styles/images/contributor4.png"; 
     } 
    } else if(id=="login"){ 
     if(state=="over"){ 
      document.getElementById(id).src="pages/styles/images/login5hover.png"; 
     } else if(state=="out"){ 
      document.getElementById(id).src="pages/styles/images/login5.png"; 
     } 
    } 
}

它在這段代碼有什麼問題?

<div class="menu"> 
    <img class="banner" src="pages/styles/images/banner.png" border="0"/> 
    <p class="link"><a href="http://www.realmsofruin.co.cc"><img id="home" src="pages/styles/images/home1.png" border="0" onmouseover="menuhover(home,over)" onmouseout="menuhover(home,out)"/></a></p> 
    <p class="link"><a href=""><img id="news" src="pages/styles/images/news2.png" border="0" onmouseover="menuhover(news,over)" onmouseout="menuhover(news,out)"/></a></p> 
    <p class="link"><a href=""><img id="register" src="pages/styles/images/register3.png" border="0" onmouseover="menuhover(register,over)" onmouseout="menuhover(register,out)"/></a></p> 
    <p class="link"><a link=""><img id="contrib" src="pages/styles/images/contributor4.png" border="0" onmouseover="menuhover(contrib,over)" onmouseout="menuhover(contrib,out)"/></a></p> 
    <p class="link"><a link=""><img id="login" src="pages/styles/images/login5.png" border="0" onmouseover="menuhover(login,over)" onmouseout="menuhover(login,out)"/></a></p> 
</div> 

引用和錯誤控制檯告訴我這

在沒有定義出來沒有定義 ..

我應該如何界定呢? ?

+0

你在代碼中調用函數時是否傳遞了狀態變量? – yoda 2009-09-07 07:10:24

+1

這個問題沒有更好的標題嗎? – random 2009-09-07 07:15:29

+0

好的,這是一個鏡頭:定義的JavaScript變量/參數顯然沒有定義,有什麼問題? – random 2009-09-07 07:23:56

回答

15

你只需要把你周圍的變量報價要傳遞:

onmouseover="menuhover('home', 'over')" 

沒有他們,就在尋找一個可變稱爲homeover不存在。

+1

我覺得有必要向OP提供單引號的使用,因爲javascript是在onmouseover&onmouseout屬性中定義的,因此已經用雙引號引起來了。 – belugabob 2009-09-07 07:14:51

+0

單引號的工作,謝謝=] ..我陷入糾正我的第一輪錯誤,我忘了他們..第一次,我忘了給圖像他們的ID:D – 2009-09-07 07:15:47

4

它應該是這樣的

onmouseover="menuhover('login','over')" 

而不是

onmouseover="menuhover(login,over)" 

即參數來調用需要是字符串的函數...

1

正如nickf正確地指出,你需要把你傳遞給你的字符串用引號括起來。

還可以短切通過使在圖像的ID手動字符串:

onmouseover="menuhover(this.id, 'over')" 

可以更進一步藉此,並使用所產生的事件對象,因此刪除需要硬編碼'over'和'out'部分。 (哦,並看看Switch語句以擺脫那些討厭的混亂if {else else {} else {} blocks)

對於第三種選擇,如果你只是在設置懸停/出圖像,你可以用CSS來完成所有這些。

+0

據我所知我不能改變使用css的圖像的src只重繪一個背景圖像我沒有他們作爲背景 – 2009-09-07 07:22:33

+0

對不起:純css解決方案當然會涉及重構你的html:自己刪除圖像,只是將它們設置爲錨上的背景圖像。 – Ian 2009-09-07 08:26:39

1

除了@nickf的正確診斷之外,我想建議您稍微簡化代碼。

function menuhover(imgElement){ 
    imgElement.src = "pages/styles/images/" + imgElement.id + "hover.png"; 
} 

function menuout(imgElement){ 
    imgElement.src = "pages/styles/images/" + imgElement.id + ".png"; 
} 


<div class="menu"> 
    <img class="banner" src="pages/styles/images/banner.png" border="0"/> 
    <p class="link"><a href="http://www.realmsofruin.co.cc"><img id="home" src="pages/styles/images/home.png" border="0" onmouseover="menuhover(this)" onmouseout="menuout(this)"/></a></p> 
    <p class="link"><a href=""><img id="news" src="pages/styles/images/news.png" border="0" onmouseover="menuhover(this)" onmouseout="menuout(this)"/></a></p> 
    <p class="link"><a href=""><img id="register" src="pages/styles/images/register.png" border="0" onmouseover="menuhover(this)" onmouseout="menuout(this)"/></a></p> 
    <p class="link"><a link=""><img id="contrib" src="pages/styles/images/contrib.png" border="0" onmouseover="menuhover(this)" onmouseout="menuout(this)"/></a></p> 
    <p class="link"><a link=""><img id="login" src="pages/styles/images/login.png" border="0" onmouseover="menuhover(this)" onmouseout="menuout(this)"/></a></p> 
</div> 

事實上,如果你是採用使用諸如jQuery庫,你甚至可以進一步簡化代碼。

+0

添加jQuery與簡化代碼相反。 – 2009-09-07 09:36:23

+0

當然,爲了這個目的而增加一個庫到項目中可能會過度,但我懷疑會有其他地方可以派上用場 - 減少開銷。無論如何,我的意思是說它會簡化標記。另外,在其他答覆中討論的僅CSS方法將完全取消javascript的需求 – belugabob 2009-09-08 07:18:50

2

正如iAn所示,CSS的智能使用可以消除javascript的整個負載 - 我非常專注於改進您的實現,我沒有發現明顯的替代方案) 假設您的圖像是16乘16,我倒是做這樣的事情......

.link a { //defines the size of all <a> elements that appear insie an element with the 'link' class 
    width: 16px; 
    height 16px; 
    background-repeat: norepeat; 
    background-position: 0px, 0px; 
} 

a.home{ //defines the appearance of the 'home' link, when the cursor is NOT over it 
    background-image: url("pages/styles/images/home.png"); 
} 

a.home:hover{ //defines the appearance of the 'home' link, when the cursor is hovering over it 
    background-image: url("pages/styles/images/homehover.png"); 
} 

a.news{ 
    background-image: url("pages/styles/images/news.png"); 
} 

a.news:hover{ 
    background-image: url("pages/styles/images/newshover.png"); 
} 

a.register{ 
    background-image: url("pages/styles/images/register.png"); 
} 

a.register:hover{ 
    background-image: url("pages/styles/images/registerhover.png"); 
} 

a.contrib{ 
    background-image: url("pages/styles/images/contrib.png"); 
} 

a.contrib:hover{ 
    background-image: url("pages/styles/images/contribhover.png"); 
} 


<div class="menu"> 
<img class="banner" src="pages/styles/images/banner.png" border="0"/> 
<p class="link"><a href="http://www.realmsofruin.co.cc">&#160;</a></p> 
<p class="link"><a href="" class="home">&#160;</a></p> 
<p class="link"><a href="" class="news">&#160;</a></p> 
<p class="link"><a link="" class="register">&#160;</a></p> 
<p class="link"><a link="" class="contrib">&#160;</a></p> 
</div> 

無需JavaScript和可能與大多數瀏覽器兼容 - 雖然我會很想把標題attrubute每個元素,以幫助屏幕閱讀器和可訪問性問題。

+0

謝謝你提供這個,我不認爲我可以設置標籤的寬度和高度。當然,因爲我沒有想到,我沒有嘗試 – 2009-09-07 16:55:52