JavaScript 在布局中找不到元素

标签 javascript ruby-on-rails

我有一个 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";
    });
});

关于JavaScript 在布局中找不到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032634/

相关文章:

javascript - 阻止 Firefox 在单击鼠标中键时在新选项卡中打开 svg 图像

javascript - 如何在 grunt build 中跳过 concat

javascript - HTML 中多个页面的一个标题

ruby-on-rails - ActionMailer 在 development.log 中发送电子邮件 "sent",但未收到

ruby-on-rails - 如何获取关联对象的最早和最晚日期

javascript - 在knockoutJs中使用data-bind=with时选项值为空

javascript - 如何检查名称索引数组中有多少个特定结果

ruby-on-rails - Rails : Segmentation fault at Rjb when in background process, 不在后台时工作正常吗?

ruby-on-rails - Nokogiri XML 导入提要组织?

ruby-on-rails - Rails View 中的变量调用