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

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

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

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

JavaScript

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

jQuery

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

3回答

571閲覧

ajaxで複数のボタンをclassで扱う際の処理について

daikitakaya

総合スコア229

Ruby

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

JavaScript

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

jQuery

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/08/11 10:53

###前提・実現したいこと
Ruby on Railsでフォロー機能を追加しようと考えています。
現在、Railsでのバックエンドの処理は完了しているのですが、ajaxでのボタンの切り替えを行いたいと考えています。

###発生している問題・エラーメッセージ
Railsではremote: tureでajaxの切り替えができ、その際create.js.erbなどのjsテンプレートが呼ばれて、セレクターで指定した箇所が変わると認識しているのですが、フォロー機能のようなボタンの場合はidでフォローボタンを指定することができず、悩んでいます。(例えば以下のようなユーザー一覧におけるフォローボタンなどはidを付与して、その部分のhtmlを書き換えると行った処理ができない。)

イメージ説明

###試したこと
通常よくある#follow_formなどと変更したい箇所をidで指定せずに.follow_formなどとして、それをjQueryevent.targetで取得しようと試みましたが、どうもうまくいきません。

create.js.erb

1$(".follow_form").click(function (event) { 2 $(event.target.className).html("<%= escape_javascript(render('/users/shared/follow')) %>"); 3});

それぞれのボタンを押したときにそのボタンだけが切り替わるようにうまく処理したいです。
###補足情報(言語/FW/ツール等のバージョンなど)
RoR 4.2.6, Ruby 2.3.4

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

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

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

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

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

guest

回答3

0

「event.target.className」で得られる値は生のクラス名で一つしかないことが保証されていません
classNameの再利用が必要な場合、すべてのクラスを対象にするために先頭にピリオドをつけたり
スペース文字をカンマに変えないといけないでしょう

javascript

1$(function(){ 2 $('#btn').on('click',function(e){ 3 var c=$(this).attr("class"); 4 c=c.replace(/^(?=.)/,".").replace(/ +/g,",."); 5 $(c).html("test"); 6 }); 7});

HTML

1<input type="button" id="btn" value="btn" class="aaa xxx"> 2aaa bbb:<div class="aaa bbb"></div> 3aaa ccc:<div class="aaa ccc"></div> 4bbb ccc:<div class="bbb ccc"></div> 5 6

またajax処理の記載がいまひとつどうしたいのかわかりませんが
ajaxでしたら都度必要データを読みにいく処理が入ると思います
もし事前にすべてのデータを読むならajaxである必要はありません

投稿2017/08/14 01:38

yambejp

総合スコア114777

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

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

0

each_with_index を使ってidを付与して個別のセレクタにすれば良いのでは無いでしょうか。

投稿2017/08/11 15:30

Yuinyan

総合スコア312

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

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

daikitakaya

2017/08/14 09:39

その場合、create.js.erb側では``this``で書き換えたい場所を指定する形でしょうか?
guest

0

thisでいけないですかね?未検証です。すみません。

javascript

1$(".follow_form").click(function () { 2 $(this).html("<%= escape_javascript(render('/users/shared/follow')) %>"); 3});

投稿2017/08/11 12:12

編集2017/08/11 12:12
IShix

総合スコア1724

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

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

daikitakaya

2017/08/11 14:52

回答ありがとうございます! 確かに$(this)で取るのが順当ですよね。 試して見たのですが、なぜかダブルクリックでないと切り替わらないのと一度切り替えたあとは動作しない感じです..... ``Form submission canceled because the form is not connected``というwarningが出てちゃいます。。
IShix

2017/08/14 08:39

ご返答遅れてすみません。teratailチェックできてませんでした。 Railsのお作法的なものがうまくクリアできていない感じですかね? 念の為、jqueryのみのシンプルな環境で試してみたところ正常に動作しました。 https://codepen.io/Ishikawa420/pen/qXPaGQ あとこういうのも見つけました。 【Chrome】隠しFormの送信が出来なくなった http://qiita.com/yosida001/items/c0d4776a7889c1db67db
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問