やろうとしたこと
Ruby on Railsでアプリを開発しています。
投稿を複数ページに分けているため、ヘッダーフッターのリンク5つに飛びたくないなと思い各リンクにname="link"を持たせ以下のコードでリンクを防ごうとしました。
application.html.erbのヘッダー、フッターに書いたリンクは以下の5つです。
1.ヘッダー左上の画像のroot_pathへのリンク
2.ヘッダーにあるユーザーへの詳細ページ
3.ヘッダーにあるログアウト
4.フッターのアプリの使い方。まだリンクは#としています。
5.フッターの外部ページへのリンク。
しかし、ログアウトとフッターのリンク2つはクリックするとリンク先に飛んでしまいます。
let elements = document.getElementsByName("link"); console.log(elements); elements.forEach(element => { element.addEventListener("click", function(e){ // リンクがクリックされたときの処理 e.preventDefault(); // 画面遷移を無効化 }, false); });
調べたこと
まずname="link"の要素は取得できているのか上記のconsole.logで取得しました。
](f6ae60460a1bbd714fe295231d64d1a1.png)
画像のように取得できていました。
次にforEachが初めの二つしかリンクを防げないのかと思い、3.以降の3つをname="link2"として別のforEach文の中身入れました。しかし結果は一緒でした。
また、1.のroot_pathへのリンクをログアウトに変更して試しましたが防げず、ログアウトしました。
わかったこと
以上のことより、このJavaScriptの文ではログアウトを防げない。
聞きたいこと
ログアウトをできなくするにはどうしたら良いでしょうか。
preventDefaultではないメソッドを使えば良いのでしょうか。
よろしくお願いします。
防げるケースと防げないケース
防げるケース
html
1①<%= link_to image_tag("kendo.png", class:"ippon-icon"), "/",name: "link" %> 2②<li class="list-top"><%= link_to "#{current_user.nickname}", user_path(current_user.id),class: "user_link",name: "link" %></li>
防げないケース
html
1③<li class="list-top"><%= link_to 'ログアウト', destroy_user_session_path, method: :delete, class: "logout" ,name: "link" %></li> 2 3④<li><%= link_to 'について', "#", class: "nippon_link" ,name: "link"%></li> 4 5⑤<li><%= link_to '全日本剣道連盟', "https://www.kendo.or.jp/", target: "_blank", rel: "noopener noreferrer",class: "nippon_link" ,name: "link"%></li>
です。よろしくお願いします。
皆さんのご回答を元に選択した方法
1.application.html.erbをコピーしてno_link.html.erbというファイルをlayoutディレクトリに作成しました。
2.リンクがあるボタンを消去しました。
3.no_link.html.erbを読み込みたいViewのアクションにrender layout: no_link
と書き足しました。
以上の方法で解決いたしました。ありがとうございました。
回答2件
あなたの回答
tips
プレビュー