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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

915閲覧

ページ遷移後のaddEventListenerメソッドの実行方法

matchi6

総合スコア18

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/01/24 10:57

###行いたいこと
・Railsでのリアルタイムでのチャット機能

※CoffeeScriptなのでJavaScriptとコードが違うと思うのですが、JavaScriptでの解決方法がお分かりの方はJavaScriptでの方法でも良いので教えていただけますと幸いです。

###channelのファイル名

$ rails g channel chatroom speak create app/channels/chatroom_channel.rb create app/assets/javascripts/channels/chatroom.coffee

###できていること
画面をリロードした場合のみ以下のコードの実行。

# channels/chatroom.coffee document.addEventListener 'DOMContentLoaded', -> input = document.getElementById('chat_input') data_user = input.getAttribute("data_user") data_room = input.getAttribute("data_room") button = document.getElementById('chat_button') button.addEventListener 'click', -> content = input.value App.chatroom.speak(content, data_user, data_room) input.value = '' return return

###できていないこと・質問内容
①他のページからチャットページへ移動した後に、チャットの送信ができなくなっているため遷移後の作動するようにする方法
(リロードすればできるようになります)
②トップページ などで指定のidがないときには、以下のようなエラーが出るのではなくスルー処理をする方法
エラー内容

###分かったこと
①HTMLを読み込んだ後に起動して欲しい以下のコードがページ遷移後に動いていない

# channels/chatroom.coffee document.addEventListener 'DOMContentLoaded', -> input = document.getElementById('chat_input') data_user = input.getAttribute("data_user") data_room = input.getAttribute("data_room") button = document.getElementById('chat_button') button.addEventListener 'click', -> content = input.value App.chatroom.speak(content, data_user, data_room) input.value = '' return return

②getAttributeで指定した値がないときにはnullを返すと分かったため、以下の記事を参考に、hasAttribute
を使って、idがある場合のみ実行したかったのですが、以下のようなエラーが現れできませんでした。
、[https://syncer.jp/Web/API_Interface/Reference/IDL/Element/hasAttribute/]

# channels/chatroom.coffee ※coffeescriptのためコードが少し違います。 document.addEventListener 'DOMContentLoaded', -> input = document.getElementById('chat_input') if input.hasAttribute('data_user') data_user = input.getAttribute("data_user") #(省略)

エラー内容

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

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

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

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

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

guest

回答1

0

ベストアンサー


turbolinksを無効にしてください

もしくは、

coffee

1document.addEventListener 'turbolinks:load', ->

で代替は可能です。(止まらないかもしれませんが)



そもそも、inputnullのようです

coffee

1 input = document.getElementById('chat_input') 2 return if input?

投稿2020/01/24 12:13

asm

総合スコア15147

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

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

matchi6

2020/01/24 12:28

ありがとうございます! おかげさまで求めていた操作を行うことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問