私が知る限り、リンク<a id="workID" href="#">WORK</a>
はクリック イベント ハンドラにバインドされていません。スクリーンショットでは、いくつかのイベントを設定していることがわかりますが、クリック時は設定されていません。

main.jsでは関数showWorkPane () を呼び出していますが、この関数では onClick のイベント ハンドラを定義していません。
function showWorkPane() {
var workID = document.getElementById("workID");
workID.addEventListener("mouseover", showWorkPaneHandler, false);
// add an event handler for click
}
あなたの質問に答えるには: DOM2 の「クリック」イベントは、「マウスオーバー」では機能するのに、なぜ機能しないのですか?
両方のイベント (クリックとマウスオーバー) をバインドする必要があります。現在、私はあなたのコードを調べていますが、発生するイベントハンドラー onmouseout が、workPanehideWorkPaneHandler(e)
を表示する意図と競合しているようです。
一連の流れはこうです
- ユーザーがリンク「仕事」の上にマウスを移動します
- ユーザーがリンク 'work' をクリックします <-- 現在、このイベントハンドラはありません。追加する必要があります
- ユーザーがリンクの外にマウスを移動 --> これが起動します
hideWorkPane(e)
更新 1: 機能していない理由
コメントの中で、ユーザーのFelix Kingは次のように述べています。それについてコメントしていただけませんか。動作しないバージョンをクリックしてオンラインに置き、ここにリンクしてください。
リンクにすべてのイベント (クリック、マウスオーバー、マウスアウト) を追加する場合、これが当てはまるかどうかに関係なく、リンクをクリックすることがリンクからマウスを移動すること (およびマウスアウトを起動すること) と競合しないという解決策を見つける必要があります。 .
更新 2: コードのリファクタリング
イベントはブラウザ間で同一ではないため、ヘルパー関数 ( quirksmode.org/ on eventsを参照)。必要に応じて、代わりに jQuery を使用できます。
function getTargetFromEvent(e) {
// http://www.quirksmode.org/js/events_properties.html#target
var targ;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
return targ;
}
イベント ハンドラーの追加をラップする関数を作成しました。このように呼び出すことで使用できますaddEventShowPaneHandler('mouseover');
function addEventShowPaneHandler(eventType){
document.getElementById("workID").addEventListener(eventType, showPaneHandler, false);
document.getElementById("aboutID").addEventListener(eventType, showPaneHandler, false);
document.getElementById("connectID").addEventListener(eventType, showPaneHandler, false);
}
show---PaneHandler(e)
次の関数は、すべての yourおよび your関数を置き換えますhide---PaneHandler(e)
。必要なのは、対応するペイン ID をリンク内のデータ属性として追加することだけです。例:<li><a id="workID" data-paneId="workPane" href="#work">WORK</a></li>
function showPaneHandler(e) { // suggestion to rename it to togglePaneDisplay
e.preventDefault();
if (!e) var e = window.event;
console.log(e.type);
var element = getTargetFromEvent(e);
// see nodeinformation attributes at http://www.quirksmode.org/dom/w3c_core.html
var paneId = element.attributes["data-paneId"].value;
var pane = document.getElementById(paneId);
if(pane.style.display == "block" || pane.style.display == "undefined")
{
pane.style.display = "none";
}else{
pane.style.display = "block";
}
}
したがって、ナビゲーション内の各リンクに対して、次のように data-paneId 属性をペインの対応する ID とともに追加します。
<nav role="navigation" id="pageNav">
<ul>
<li><a id="workID" data-paneId="workPane" href="#work">WORK</a></li>
<li><a id="aboutID" data-paneId="aboutPane" href="#about">ABOUT</a></li>
<li><a id="connectID" data-paneId="connectPane" href="#connect">CONNECT</a></li>
</ul>
他にご不明な点がある場合や、さらにサポートが必要な場合はお知らせください。