2017-10-17 30 views
-4

私の会社のウェブサイトにアコーディオンメニューを追加しようとしていますが、何らかの理由でHTMLとCSSが正常に読み込まれますが、JSがページに読み込まれていないようです。私はコードペンで動作するテンプレートを使用しているので、私はJSをどこに置いているのかという問題である可能性が最も高いと考えています。私は、Webページhttps://www.nlfxpro.com/meet-our-team/のセクションに次のコードを入れている:読み込み時のJavaScriptの問題

<script> 
/*! 
* classie - class helper functions 
* from bonzo https://github.com/ded/bonzo 
*/ 


(function(window) { 

'use strict'; 

// class helper functions from bonzo https://github.com/ded/bonzo 

function classReg(className) { 
    return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); 
} 

// classList support for class management 
// altho to be fair, the api sucks because it won't accept multiple classes at once 
var hasClass, addClass, removeClass; 

if ('classList' in document.documentElement) { 
    hasClass = function(elem, c) { 
    return elem.classList.contains(c); 
    }; 
    addClass = function(elem, c) { 
    elem.classList.add(c); 
    }; 
    removeClass = function(elem, c) { 
    elem.classList.remove(c); 
    }; 
} 
else { 
    hasClass = function(elem, c) { 
    return classReg(c).test(elem.className); 
    }; 
    addClass = function(elem, c) { 
    if (!hasClass(elem, c)) { 
     elem.className = elem.className + ' ' + c; 
    } 
    }; 
    removeClass = function(elem, c) { 
    elem.className = elem.className.replace(classReg(c), ' '); 
    }; 
} 

function toggleClass(elem, c) { 
    var fn = hasClass(elem, c) ? removeClass : addClass; 
    fn(elem, c); 
} 

var classie = { 
    // full names 
    hasClass: hasClass, 
    addClass: addClass, 
    removeClass: removeClass, 
    toggleClass: toggleClass, 
    // short names 
    has: hasClass, 
    add: addClass, 
    remove: removeClass, 
    toggle: toggleClass 
}; 

// transport 
if (typeof define === 'function' && define.amd) { 
    // AMD 
    define(classie); 
} else { 
    // browser global 
    window.classie = classie; 
} 

})(window); 

//fake jQuery 
var $ = function(selector){ 
    return document.querySelector(selector); 
} 
var accordion = $('.acc'); 





//add event listener to all anchor tags with accordion title class 
accordion.addEventListener("click",function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    if(e.target && e.target.nodeName == "A") { 
    var classes = e.target.className.split(" "); 
    if(classes) { 
     for(var x = 0; x < classes.length; x++) { 
     if(classes[x] == "acc_title") { 
      var title = e.target; 

      //next element sibling needs to be tested in IE8+ for any crashing problems 
      var content = e.target.parentNode.nextElementSibling; 

      //use classie to then toggle the active class which will then open and close the accordion 

      classie.toggle(title, 'acc_title_active'); 
      //this is just here to allow a custom animation to treat the content 
      if(classie.has(content, 'acc_panel_col')) { 
      if(classie.has(content, 'anim_out')){ 
       classie.remove(content, 'anim_out'); 
      } 
      classie.add(content, 'anim_in'); 

      }else{ 
      classie.remove(content, 'anim_in'); 
      classie.add(content, 'anim_out'); 
      } 
      //remove or add the collapsed state 
      classie.toggle(content, 'acc_panel_col'); 




     } 
     } 
    } 

    } 
}); 
</script> 
+0

これを明確にする必要があります:* "JSはページにロードされていないようです" *。症状は何ですか?この結論につながるのは何ですか? – kryger

+0

domが準備される前にJavascriptが実行されています。 JSを本体の底に置くか、onLoadコールバックを追加します。あなたのメニューはセレクタがヌルであるために動作しません(エラーmeet-our-teamによって示されます:274 Uncaught TypeError:nullのプロパティ 'addEventListener'を読み取ることができません) meet-our-teamで: –

+0

@krygerどのように動作するべきかの例へのリンク。 –

答えて

-1

あなたのコードは、DOMがロードされる前に実行されます。

HTML構造を確認してください。

<!html> 
<html> 
    <head> 
    <!-- Here your style, title, meta --> 
    <!-- Here your JS library if need --> 
    </head> 
    <body> 
    <!-- Here your html --> 
    <!-- Here your JS code --> 
    </body> 
</html> 

<script> 
    document.addEventListener('DOMContentLoaded', function(){ 
    // Here your JS code 
    }); 
</script> 

DOM準備のリスナーにJavaScriptコードをカプセル化するようにしてください。このイベントは、DOMを使用する準備ができているとき、火です。

更新ステップ2

それはあなたのmodelで書いたよう。 AタグはDTタグの内側にある必要があります。

+0

私はこれらの変更を行いましたが、 'document.addEventListner(' DOMContentLoaded '、function(){'関数が存在しないことにエラーが発生しています) –

+0

申し訳ありません、間違えて入力してください 'addEventListener' – Techniv

+0

ありがとうございましたしかし、JavaScriptはまだ不幸にも機能していません。コードサンプルテンプレートは、JSがどのように反応するかを示しています:https://codepen.io/anon/pen/eGQExQ –

関連する問題