0

これが私の設定です:

動的包含を使用するモジュラーサイトがあります。ヘッダーはメインページで必要です。メインページは、サイト上の特定のリンクからのコンテンツのレンダリングのみを担当します。したがって、CSSおよびjsファイルへの外部リンクはメインページの先頭にあり、コンテンツページはメインページ内のコンテンツとして含まれるように設計された(php)ドキュメントフラグメントです。

クライアント側では、Javascriptを使用してメニューを動的に機能させたいと思います。私はすでにCSSを使用して、、、および疑似クラスのスタイルを:hover設定:activeしています:visited。アクティブボタンと非アクティブボタンの両方に関連する2つの別々のクラスを定義しました。私はjsを作成し、リンクのonclickイベントを設定し、スクリプトを外部にリンクしました。

問題

Firebugはスクリプトを検出していますが、リンクをクリックしても関数は起動しません。

コード

インライン関数呼び出しを含むHTMLメニュー要素:

 <ul>
        <li class="navLnk"><a href="mylinks.php" tabindex="2" accesskey="2" onclick"asgnActv(this)">BANDS</a></li>
        <li class="navLnk"><a href="mylinks.php" tabindex="3" accesskey="3" onclick"asgnActv(this)">RELEASES</a></li>
 </ul>

Javascript関数:

function asgnActv(e){
if (e.className == 'navLnk') {
    $lnkArr = document.getElementsByClassName('actvLnk');
    for (i=0; i<$linkArr.length; i++) {
        $linkArr[i].className = 'navLnk';
    }
    e.className = 'actvLnk';
  }
}

メインのphpページの先頭にある外部jsリンク:

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

1 に答える 1

1

@Josephによって言及された「=」記号が欠落している2つの間違いがあると思います。また、このクラス「navLnk」がその親要素に定義されているのに対し、jsコードではそのclassNameをチェックしています。< li >

したがって、これを機能させるには、要素をアンカーするクラスを指定するか、li要素に必要な場合は以下のスクリプトを使用します

function asgnActv(e){
   if (e.parentNode.className == 'navLnk') {
     $lnkArr = document.getElementsByClassName('actvLnk');
     for (i=0; i<$linkArr.length; i++) {
       $linkArr[i].className = 'navLnk';
     }
     e.parentNode.className = 'actvLnk';
   }
}

これがお役に立てば幸いです。

于 2012-09-04T18:35:22.290 に答える