2012-03-20 38 views
0

我在我的HTML文件導航這樣的代碼: 當鼠標不再位於導航鏈接上時,如何調用該函數?

<div id="center_links"> 
      <ul> 
       <li><a href="#" onMouseOver="javascript:setSideText(1)">about</a></li> 
       <li><a href="blog" onMouseOver="javascript:setSideText(2)">blog</a></li> 

...等等。

我的JavaScript看起來像這樣:

function setSideText(setting) 
{ 
    if (setting == 0) // Home 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>I am an information technology student interested in free and open source software.</p>'; 
    } 
    else if (setting == 1) // About 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>My name is David Gay, and this is my website. Welcome.</p>'; 
    } 
    else if (setting == 2) // Blog 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>My blog runs on the <a href="http://chyrp.net/">Chyrp</a> blog software.'; 
    } 

當我將鼠標懸停在鏈接,在我的頁面更改側面文字來描述的鏈接。我不希望鼠標移動到導航鏈接上時,文本會變回默認值(setSideText(0))。我現在一直在玩這個遊戲,而且我一直沒有弄明白。

我嘗試添加這對JavaScript文件,但無濟於事:

document.getElementById('center_links').onMouseOut = setSideText(0); 

我想這是行不通的,反正。

我確定有一個簡單的解決方案,我沒有想到(我只是拿起語言)。任何指導表示讚賞!

回答

1

我會想辦法讓兩個主要建議,第一:不要使用內聯事件處理程序(它更易於維護在一個地方你的行爲)和第二在父元素center_links上使用onmouseout

爲此:

function setSideText(setting) { 
    if (setting == 0) // Home 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>I am an information technology student interested in free and open source software.</p>'; 
    } 
    else if (setting == 1) // About 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>My name is David Gay, and this is my website. Welcome.</p>'; 
    } 
    else if (setting == 2) // Blog 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>My blog runs on the <a href="http://chyrp.net/">Chyrp</a> blog software.'; 
    } 
} 

var linksElem = document.getElementById('center_links'), 
    links = linksElem.getElementsByTagName('a'); 

for (var i = 0, len = links.length; i < len; i++) { 
    links[i].dataIndex = i+1; 
    links[i].onmouseover = function() { 
     setSideText(this.dataIndex); 
    }; 
} 

linksElem.onmouseout = function(){ 
    setSideText(0); 
} 

JS Fiddle demo


編輯修改setSideText()功能來話作出迴應,而不是一個索引(因爲我認爲這是在日後添加後續環節更容易,並且不依賴於能夠任意屬性添加到元素,儘管它確實要求元素具有id屬性...):

function setSideText(setting) { 
    if (setting == 'home' || setting == 0) 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>I am an information technology student interested in free and open source software.</p>'; 
    } 
    else if (setting == 'about') 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>My name is David Gay, and this is my website. Welcome.</p>'; 
    } 
    else if (setting == 'blog') 
    { 
     document.getElementById('center_text').innerHTML = '<p><div class="dropcap">#</div>My blog runs on the <a href="http://chyrp.net/">Chyrp</a> blog software.'; 
    } 
} 

var linksElem = document.getElementById('center_links'), 
    links = linksElem.getElementsByTagName('a'); 

for (var i = 0, len = links.length; i < len; i++) { 
    links[i].onmouseover = function() { 
     setSideText(this.id); 
    }; 
} 

linksElem.onmouseout = function(){ 
    setSideText(0); 
} 

JS Fiddle demo

+0

剛剛看到你的編輯,現在正在閱讀... – 2012-03-20 17:19:16

+0

好吧,我的代碼看起來像你的,但它不工作。在任何鼠標懸停的情況下,下一個都不會改變。我仍然在擺弄它... – 2012-03-20 17:25:11

+0

你可以發佈一個[演示來重現你的代碼](http://jsfiddle.net/)? – 2012-03-20 17:26:41

1

爲什麼這樣做不起作用的唯一原因是因爲在Javascript中設置這些DOM事件時,沒有大寫字母;只需將.onMouseOut更改爲.onmouseout即可。

我不知道他們爲什麼決定在這些事件的HTML和Javascript名稱之間不一致。 (爲什麼人們討厭的DOM還有一個原因,我想。)

+0

感謝您的提示。我做了更改,但即使將鼠標移出導航div,側文仍保持設置爲最後一個mouseover命令的狀態。仍在玩它。 – 2012-03-20 16:56:08

+0

你的JS在哪裏調用''.onmouseout''?它需要在加載DOM之後,在一個'document.onload'事件中運行*。或者,@danblundell有另一種方法來確保事件處理程序已正確連接。 – 2012-03-20 17:00:13

1

您需要觸發功能的onmouseout你觸發功能,以同樣的方式的onMouseOver

您的鏈接HTML需要看起來像這樣:

<a href="blog" onMouseOver="javascript:setSideText(2)" onMouseOut="javascript:setSideText(0)">blog</a> 

我會建議尋找jQuery這樣的東西 - 它使處理事件和DOM操作更直接!

有一個偉大的免費課程這裏:http://tutsplus.com/course/30-days-to-learn-jquery/

+0

這是有效的,如果它是最簡單的方式,而不使用jQuery,那麼我會接受它。 ;)我很好奇,如果有一種方法可以實現這一點,而不必爲每個鏈接添加onMouseOut。並感謝鏈接!我一直計劃在幾周內學習jQuery。 – 2012-03-20 16:59:29

+0

沒問題 - 本教程非常清晰,它將帶領您從基本事件到全面的插件開發。強烈推薦。 – danblundell 2012-03-20 17:03:42

+0

我也會說Dave Thomas的回覆更加完整 - 你的代碼可以用更加可重用的方式編寫,但如果你是js的新手,這是可以理解的! – danblundell 2012-03-20 17:05:31

相關問題