簡體   English   中英

JavaScript無法在布局中查找元素

[英]JavaScript not finding elements in layout

我有一個ruby on rails程序,它在應用程序布局中顯示flash消息:

<% if flash[:notice] %>
   <p id="notice">
      <span id="notice-button-left">[-]</span>
      <%= flash[:notice] %>
      <span id="notice-button-right">[-]</span>
   </p>
<% end %>

點擊<spans> #notice-button-left和#notice-button-right,我希望<p>消失,所以我添加了代碼:

document.getElementById("notice-button-right").addEventListener("click", function(){
    document.getElementById("notice").style.display = "none";
});

document.getElementById("notice-button-left").addEventListener("click", function(){
    document.getElementById("notice").style.display = "none";
});

<script>標記並將其放在application.html.erb布局中。 這非常有效。 但是,當我取出<script>標簽並將js放入app / assets / javascripts文件夾中的.js文件時,它停止工作。 檢查瀏覽器時,它似乎找到了js文件,但js只是不起作用。

注意一:我有另一個正在運行的腳本

注意二:我關閉了turbolinks

我想要的是讓腳本工作並在點擊跨度時消失通知。

嘗試將javascript代碼包裝在文檔中,因為看起來你沒有使用jQuery,這樣的東西應該在app / assets / javascripts文件夾中工作:

document.addEventListener("DOMContentLoaded", function(event) { 
  document.getElementById("notice-button-right").addEventListener("click", 
    function(){
      document.getElementById("notice").style.display = "none";
    });

  document.getElementById("notice-button-left").addEventListener("click", 
    function(){
      document.getElementById("notice").style.display = "none";
    });
});

如果</body>當前位於<head>中,請將腳本加載到</body>之前。 您的腳本引用的DOM內容很可能尚未出現。 在標記渲染后加載腳本應解決此問題,並為您的網站提供更好的速度。

另一種方法是將您的腳本包裝在DOMContentLoaded事件中,但通常您希望在任何一種情況下都將腳本保持在頁面的下方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM