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

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

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

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

656閲覧

Railsのajaxを制御したい

course_so

総合スコア59

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/07/22 03:21

編集2021/07/22 03:50

ボタンをクリックしたらjqueryでモーダルウィンドウでフォームを表示させ、submitボタンをクリックした時にajax(js.erb)でバリデーションの結果を表示させる機能を作成していますが、
そのモーダルウィンドウを非表示にする×ボタンをクリックすると、エラーメッセージが表示されてしまいます。

submitボタンをクリックした時にだけajaxが作動するようにしたいのですが、そのような方法はあるでしょうか?

コードは以下の通りです。

html

1// show.html.erb 2<%= form_with url: tests_create_path, id:'create_form' do |f| %> 3 <button class="close close-modal"> 4 <%= icon('fas', 'times' ) %> 5 </button> 6 <%= f.text_field :name, id:'text_field' %> 7 <div id="message"> 8 </div> 9 <div class="actions"> 10 <%= f.submit "登録" , id:'create_button' %> 11 </div> 12<% end %>

js

1// modal_window.js 2 3$(function() { 4 $(document).on('turbolinks:load', function() { 5 // モーダルウィンドウ表示 6 $(document).on('click', '.create-test-btn', function(e){ 7 $('.container').fadeIn(); 8 }); 9 // モーダルウィンドウ非表示 10 $('.close-modal').on('click',function(){ 11 $('.container').fadeOut(); 12 }); 13 14 $('.overlay').on('click',function(){ 15 $('.container').fadeOut(); 16 }); 17 }); 18});

js

1// create.js.erb 2// エラーメッセージを呼び出す 3$(function(){ 4 document.body.addEventListener('ajax:success', function(event) { 5 // ajax done 6 <% if @test.errors.any? %> 7 $("#message").html("<p><%= j(render partial: 'error_message', locals: {model: @project_object}) %></p>") 8 <% else %> 9 $("#message").html("<p><%= j(render partial: 'flash_message', locals: {model: @project_object}) %></p>") 10 <% end %> 11 }); 12 13 document.body.addEventListener('ajax:error', function(event) { 14 // ajax fail 15 alert("エラー"); 16 }); 17 18 document.body.addEventListener('ajax:complete', function(event) { 19 // ajax always 20 }); 21});

html

1// _error_message.html.erb 2<% if model.errors.any? %> 3 <div id="validation-errors"> 4 <p><%= model.errors.count %>件のエラーがあります。</p> 5 <ul class="error-messages"> 6 <% model.errors.full_messages.each do |message| %> 7 <li class="error-message"><%= message %></li> 8 <% end %> 9 </ul> 10 </div> 11<% end %>

ご教示いただけることがあれば、よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2021/07/22 03:31

エラーメッセージとは?
course_so

2021/07/22 03:34

create.js.erb内でj(render partial: 'error_message')で呼び出しているhtml.erbのパーシャルです
guest

回答1

0

自己解決

<button class="close close-modal">がform内に入っていたのが原因でした。しつれいしました

投稿2021/07/22 04:49

course_so

総合スコア59

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問