質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

949閲覧

removeEventListener関連 submitやlinkでアラートを表示させない方法

takapurogura

総合スコア0

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/05/24 08:35

前提・実現したいこと

① 現在、自分が作成しているアプリケーションにて、記事を投稿するページだけアラート(このサイトを離れますか?)を実装しようとしています。
② 実装はできたのですが、このアラートはブラウザの戻るやリロードした時だけ表示するようにして、投稿するボタン(submit)や、各ページへ遷移するリンクをクリックした時には表示させないようにしたいです。
③ removeEventListenerの記述でうまくできるかなと思いましたが、投稿するボタン、リンクのクリックで表示されてしまいます(くどいようですが、この場合には表示させたくない)。
④ ご助言をいただけると幸いです。

該当のソースコード

JavaScript

1function unloaded(e) { 2 if (document.URL.match( "posts/new" )) { 3 e.preventDefault() 4 e.returnValue = '' 5 } 6 7 const submitBtn = document.getElementById('post-button') 8 const headerList = document.getElementById("header-button") 9 const footerList = document.getElementById("footer-button") 10 11 submitBtn.addEventListener('click',function(){ 12 window.removeEventListener('beforeunload', unloaded) 13 }) 14 15 headerList.addEventListener('click',function(){ 16 window.removeEventListener('beforeunload', unloaded) 17 }) 18 19 footerList.addEventListener('click',function(){ 20 window.removeEventListener('beforeunload', unloaded) 21 }) 22} 23 24window.addEventListener('beforeunload', unloaded)

RubyonRails

1<header> 2 <div class="contents"> 3 <h1 class="title">ROAD BICYCLE</h1> 4 <div class="search-bar"> 5 <%= form_with(url: "#", local: true, method: :get, class: "search-form") do |form| %> 6 <%= form.text_field :keyword, placeholder: "キーワード検索", class: "search-box" %> 7 <button class="search-btn"> 8 <%= image_tag "search.png",class:"search-icon" %> 9 </button> 10 <% end %> 11 </div> 12 </div> 13 <div class="header-list"> 14 <ul> 15 <% if user_signed_in? %> 16 <li><%= link_to '投稿する', new_post_path, id: "header-button", data: { confirm: 'この記事はまだ投稿されていません。移動してもいいですか?' } %></li> 17 <li><%= link_to '予定の確認', '#', data: { confirm: 'この記事はまだ投稿されていません。移動してもいいですか?' } %></li> 18 <li><%= link_to current_user.username, "#", data: { confirm: 'この記事はまだ投稿されていません。移動してもいいですか?' } %> </li> 19 <li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete, data: { confirm: 'この記事はまだ投稿されていません。ログアウトしてもいいですか?' } %></li> 20 <% else %> 21 <li><%= link_to '投稿する', new_post_path %></li> 22 <li><%= link_to '予定の確認', '#' %></li> 23 <li><%= link_to '新規登録', new_user_registration_path %></li> 24 <li><%= link_to 'ログイン', new_user_session_path %></li> 25 <% end %> 26 </ul> 27 </div> 28</header> 29 30 <body> 31 <%= form_with model: @post, url: posts_path, id: 'new_post', class: 'new-post-form', local: true do |f| %> 32 <% if @post.errors.any? %> 33 <% end %> 34 <div class="image-area"> 35 <div class="image-label"> 36 <p>■ 画像</p> 37 </div> 38 <div class="image-input"> 39 <%= f.file_field :image, id:"post-image" %> 40 </div> 41 </div> 42 <div class="title-area"> 43 <div class="title-label"> 44 <p>■ 記事のタイトル</p> 45 </div> 46 <div class="title-input"> 47 <%= f.text_field :title, class:"input-post", id:"title" %> 48 <% if @post.errors.include?(:title) %> 49 <p style="color: red;"><%= @post.errors.full_messages_for(:title).first %> 50 <% end %> 51 </div> 52 </div> 53 <div class="text-area"> 54 <div class="text-label"> 55 <p>■ 記事の内容</p> 56 </div> 57 <div class="text-input"> 58 <%= f.text_area :text, class:"input-post", id:"text" %> 59 <% if @post.errors.include?(:text) %> 60 <p style="color: red;"><%= @post.errors.full_messages_for(:text).first %> 61 <% end %> 62 </div> 63 </div> 64 <div class="category-area"> 65 <div class="category-label"> 66 <p>■ 記事の種類</p> 67 </div> 68 <div class="category-input"> 69 <%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"category-box", id:"post-category"}) %> 70 <% if @post.errors.include?(:category_id) %> 71 <p style="color: red;"><%= @post.errors.full_messages_for(:category_id).first %> 72 <% end %> 73 </div> 74 </div> 75 <div class="post-btn"> 76 <%= f.submit "投稿" ,class:"post-red-btn", id:'post-button', data: { confirm: '投稿しますか?' } %> 77 </div> 78 <% end %> 79 </body> 80 81<div class="footer"> 82 <ul class="footer-list"> 83 <li><%= link_to '●トップページへ', root_path, id: "footer-button" ,data: { confirm: 'この記事はまだ投稿されていません。移動してもいいですか?' } %></li> 84 <li>●メニュー</li> 85 <li>●ユーザー名</li> 86 </ul> 87</div>

試したこと

removeEventListenerの内容を確認し、記述してみたものの、上手くいっていない状況です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

submitBtn.addEventListener('click', ... がどのタイミングで実行されるか、考えてみてください。ユーザがボタンをクリックするより前に実行されないと、当然ここで指定したイベントリスナは動きません。

投稿2021/05/24 23:43

編集2021/05/24 23:44
int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問