###質問内容
jQeuryで「$()」と書くタイミングが異なる場合、「jQueryオブジェクトを含む変数」になったりならなかったりする原因を知りたいです。
###HTML、CSS
以下.forms
にテキストボックスを挿入し、そこに「aです」などをプレースホルダーのようにセットしたいと考えています。
そのためのjQueryの挙動を問題視しています。
HTML
1<button type="button" data-kind="a">「aです」をセット</button> 2<button type="button" data-kind="b">「bです」をセット</button> 3<div class="forms"> 4 <ul> 5 </ul> 6</div>
CSS
1.dummy { 2 position: absolute; 3 opacity: 0; 4} 5.dummy, .clone { 6 height: 200px; 7 width: 300px; 8 border: 1px solid black; 9 margin: 0 0 10px 0; 10 padding: 0; 11} 12ul,li{ 13 list-style: none; 14}
###問題・ソースコード
次のjQeuryをご覧ください。
【4行目】でなく【5行目】を使った場合、「aです」や「bです」がセットされて問題ありません。
しかし【4行目】を使った場合セットされず、これを問題視しています。
なぜならここで「$()」と書かずとも、【8行目】で「$()」を書いているため、セットされるはずだという考えだからです。なぜ「$()」と書くタイミングによって結果が異なるのか、腹落ちできません。
【9行目】でコンソールを出してみると、やはり【5行目】と【8行目】のどのタイミングで「$()」と書かによって異なるログとなりますが、なぜ【8行目】では「$()」が効かないのでしょうか?
// placeholderをセット $('button').click(function(){ var kind = $(this).attr('data-kind'); var li = '<li>' + html( kind ) + '</li>'; //【4行目】こちらではセットされない var li = $('<li>' + html( kind ) + '</li>'); //【5行目】「aです」や「bです」がセットされる $('.forms > ul').html( li ); var textarea = $(li).find('textarea'); var $textarea = $(textarea); //【8行目】 console.log( '$textarea =', $textarea ); //【9行目】 set_placeholder( $textarea ); }); // formのHTMLを取得 function html( kind ){ const placeholder = kind + 'です'; return ` <div class="form"> <textarea class="dummy"></textarea> <div class="clone" data-placeholder="${ placeholder }">ここに「aです」や「bです」をセットしたい</div> </div> `; } // placeholderをセット function set_placeholder( $textarea ){ $clone = $textarea.closest('.form').find('.clone'); $dummy = $textarea.closest('.form').find('.dummy'); const placeholder = $clone.attr('data-placeholder'); $clone.html( placeholder ); $dummy.val(''); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/06 11:16
2020/11/06 11:36 編集
2020/11/06 11:50
2020/11/06 11:50
2020/11/06 12:53