Непонятно, почему function openNav()
не работает в Rails 6. Я подозреваю, что это связано с изменениями со Sprockets на Webpacker. Я нашел решение, которое может быть более традиционным, чем добавление методов к объекту "окно". Добавление методов или свойств непосредственно к объекту «окно» может непреднамеренно перезаписать значения по умолчанию. Я воспользовался руководством RailsGuides.
https://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html
Я добавил «id» к элементам Open и Close и удалил их свойства «onclick». Добавление идентификаторов позволило мне настроить таргетинг на них в файле side_nav. js, чтобы добавить прослушиватели событий «щелчок».
Index. html .erb
<div id="mySidenav" class="sidenav">
<a href="#" class="closebtn" id="close-nav >×</a>
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Clients</a>
<a href="#">Contact</a>
</div>
<span id="open-nav>Open</span>
<%= javascript_pack_tag 'side_nav' %>
Я использую Turbolinks, и поэтому я жду добавления слушателей событий до тех пор, пока не загрузятся Turbolinks, чтобы убедиться, что DOM завершил рендеринг. Это обеспечит доступность идентификатора для таргетинга. Если вы не используете Turbolinks, вы можете заменить его на "DOMContentLoaded".
javascript \ packs \ side_nav. js
window.addEventListener("turbolinks:load", () => {
// Open
document.getElementById('open-nav').addEventListener("click", e => {
e.preventDefault();
document.getElementById("mySidenav").style.width = "250px";
});
// Close
document.getElementById('close-nav').addEventListener("click", e => {
e.preventDefault();
document.getElementById("mySidenav").style.width = "0";
});
});