LoginSignup
1
1

More than 3 years have passed since last update.

【rails】modalを出現させてデータの「更新」をajaxで実装する方法

Posted at

自己紹介

rails学習約4ヵ月です。
bootstrapでmodalウィンドウを出現させ、編集⇒更新をajax処理で行いたいと思いましたがなかなかうまくいかずに悩んだので備忘録として記録しておきます。

やりたい事

1.左上の「・・・」を押すとモーダルが出現。
スクリーンショット (88).png
2.続けて「編集」を押すとデータが編集画面のモーダルが出現
スクリーンショット (89).png
3.「更新」を押すとmodalがすべて閉じて、変更した部分だけが変わるようになる
スクリーンショット (90).png
こんな感じ。(リロードではなく非同期通信で行えている)
スクリーンショット (88).png

起こった問題

「更新」を押すと以下のようになり、スクロールなど何もできない。「更新」の処理は思惑通りにうまく処理できている。
スクリーンショット (91).png

この時のjqueryのコード

2番目に開いたモーダルを閉じる処理↓
$("#modal-e"+"<%= @menu_list.id %>").modal('hide');
1番目に開いたモーダルを閉じる処理↓
$("#modal-"+"<%= @menu_list.id %>").modal('hide');
変更したいところをshow_menuクラスで囲み、それをrenderでmenu_list_showに置き換える処理↓
$('.show_menu').html("<%= escape_javascript(render 'menu_list_show', menu_lists: @menu_lists, families: @families ) %>");```

モーダルが完全に閉じていない

スクリーンショット (93).png
googlechromeの検証ツールで見てみると

class="modal-backdrop fade show"

が消えていないのが確認できました。
試しにこの状態でこれを消してみると、、、
スクリーンショット (94).png
暗い部分が消えました!
ですが、この状態ではまだスクロールはできません。

つづいてmodal-openも消してみる

検証ツールを引き続きみてみると、「modal-open」というクラスがあることが確認できます。
左側を見てみると

modal-open {
overflow: hidden;

「modal-open」クラスは「overflow: hidden;」になっています。
これを消してみると、、、
スクリーンショット (88).png

無事に動きました!これで想定した動作ができたことになります。

まとめ

今回問題だったのが、

class="modal-backdrop fade show"

modal-open {
overflow: hidden;

モーダルを閉じたときにも残っていたことが問題だったことがわかりました。

なので、jqueryで以下を付け足します。

modal-backdropクラスを削除する処理↓
$(".modal-backdrop").remove();
modal-openクラスを削除する処理↓
$("body").removeClass("modal-open");

これで無事に実装ができました。
今回の事が同じような状況に遭遇している方の参考になれば幸いです♪

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1