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

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

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

Google Optimizeは、Google社が提供するA/Bテストツール。有料サービスであるGoogle Optimize360の無償版です。登録が簡単で、多変量テストやRedirectテストといったテストも本格的に行うことができます。

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1236閲覧

formが複製されるのを感知したい

Tomowe_kosaka

総合スコア27

Google Optimize

Google Optimizeは、Google社が提供するA/Bテストツール。有料サービスであるGoogle Optimize360の無償版です。登録が簡単で、多変量テストやRedirectテストといったテストも本格的に行うことができます。

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/10/12 09:52

編集2018/10/16 01:32

Reactで複製されたformをアコーディオンメニュー化したいのですが、[Reactで複製されたform]が複製される際の挙動をjQueryでは感知できなくて詰んでいます。

jQuery

1 2$('.product_container').on("DOMSubtreeModified propertychange", function borro(){ 3 4 var n= 1; 5 6 var new1 = $('.product_container').children('.product_cell').eq(n).children('.form'); 7 8 new1.children('.input_wrapper.type-selectbox').eq(2).after('<div class="input_wrapper accordion"></div>'); 9 10 new1.children(".accordion").text('詳細入力はこちら'); 11 12 new1.children('.input_wrapper:gt(5)').addClass('display_none'); 13 14 new1.children('.input_wrapper:gt(10)').removeClass('display_none'); 15 16 new1.children('.display_none').wrapAll('<div class="display_hidden"></div>'); 17 18$(function(){ 19 new1.children(".accordion").on("click", function() { 20 $(this).next().slideToggle(); 21 }); 22}); 23 24n++; 25 26 27}); 28

以下のように、複製される前に押すボタンの前にdivを噛ませてみたのですが、functionが発火することはありませんでした。

var $click = $('.add_item_btn').append('<div class="click"></div>'); $('.click').on("click", function (){〜var n= 1;以下n++;まで〜}

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

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

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

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

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

guest

回答1

0

ベストアンサー

デリゲートで対応できそうな気がします。

If selector is omitted or is null, the event handler is referred to as direct or directly-bound.

(略)

When a selector is provided, the event handler is referred to as delegated. The handler is not called when the event occurs directly on the bound element, but only for descendants (inner elements) that match the selector.

.on( events [, selector ] [, data ], handler )

意訳「セレクタが省略された場合、イベントハンドラはダイレクトと呼ばれます。(略)セレクタが指定された場合、イベントハンドラはデリゲートと呼ばれます。ハンドラはダイレクトにバインドされた要素では呼ばれず、セレクタにマッチする子孫(内部要素)で呼ばれます」

投稿2018/10/13 00:45

Lhankor_Mhy

総合スコア36115

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

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

Tomowe_kosaka

2018/10/15 01:27

ご回答ありがとうございます。 セレクタを描画される'.product_cell'にしてみたのですが、発火しませんでした。 ご面倒ですが、どのようにデリゲートを指定したら良いのか、お教え願えませんか?
Lhankor_Mhy

2018/10/15 05:38

ご提示いただいてるソースだけだと確実なことはいえませんが、おそらく、 $(document).on('click', '.accordion', function(){...}); でいいのではないかな、と思います。
Tomowe_kosaka

2018/10/16 01:27

ご回答ありがとうございます。 解決はできなかったのですが、新たな知見を得ることができました。 ありがとうございます。
Lhankor_Mhy

2018/10/16 10:50

質問を変更されたのですね。 DOM変更の検知は、MutationObserver を使うといいかもしれませんね。
Tomowe_kosaka

2018/10/17 01:29

やりたいことを細かくした結果、質問のタイトルと質問内容がズレていたので、修正させていただきました。 MutationObserver、使ってみます!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問