teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コメントで指摘を受けた点について修正

2019/08/30 17:03

投稿

frodo821
frodo821

スコア322

answer CHANGED
@@ -17,20 +17,15 @@
17
17
  }
18
18
 
19
19
  <script>
20
- function clickListener () {
21
- $(this).toggleClass('circle');
22
- }
23
20
  for (let i = 0; i < 10; i++) {
24
- $('.box:last')
25
- .after('<div class="box"></div>')
21
+ $('.box:last').after('<div class="box"></div>');
26
- .click(clickListener);
27
22
  }
28
- $('.box:last').click(clickListener);
23
+ $('.box').click(function () {
24
+ $(this).toggleClass('circle');
25
+ });
29
26
  </script>
30
27
  ```
31
28
 
32
29
  このように修正すればよいはずです。JQueryのappend関数は、選択した要素の末尾(要素の内側であることに注意)に要素を追加します。今回の場合は要素の後に追加したいので、after関数が適切です。
33
30
 
34
- この例では要素の方にイベントリスナを付けていますが、こだわりがなければwindowやdocumentにくっつけた方がぶっちゃけタイプ数は減ります。が、色々と意図しない不具合の原因になることが多々あるのでおすすめはしないです。(JQueryの入門とかみるとdocumentとかにつけてる方が多いかもですけれど……。)
35
-
36
31
  また、セレクタに:lastをつけたのは1ループにつき要素を1つ増やすためです。倍々に増えていくのが正しい動作ならば消してください。

3

解説を追記

2019/08/30 17:03

投稿

frodo821
frodo821

スコア322

answer CHANGED
@@ -29,6 +29,8 @@
29
29
  </script>
30
30
  ```
31
31
 
32
- このように修正すればよいはずです。JQueryのappend関数は、選択した要素の末尾(要素の内側であることに注意)に要素を追加します。今回の場合は要素の後に追加したいので、after関数が適切です。そして、after関数の戻り値は
32
+ このように修正すればよいはずです。JQueryのappend関数は、選択した要素の末尾(要素の内側であることに注意)に要素を追加します。今回の場合は要素の後に追加したいので、after関数が適切です。
33
33
 
34
+ この例では要素の方にイベントリスナを付けていますが、こだわりがなければwindowやdocumentにくっつけた方がぶっちゃけタイプ数は減ります。が、色々と意図しない不具合の原因になることが多々あるのでおすすめはしないです。(JQueryの入門とかみるとdocumentとかにつけてる方が多いかもですけれど……。)
35
+
34
36
  また、セレクタに:lastをつけたのは1ループにつき要素を1つ増やすためです。倍々に増えていくのが正しい動作ならば消してください。

2

コードの修正

2019/08/30 16:48

投稿

frodo821
frodo821

スコア322

answer CHANGED
@@ -17,17 +17,18 @@
17
17
  }
18
18
 
19
19
  <script>
20
+ function clickListener () {
21
+ $(this).toggleClass('circle');
22
+ }
20
23
  for (let i = 0; i < 10; i++) {
21
24
  $('.box:last')
22
25
  .after('<div class="box"></div>')
23
- .click(function () {
26
+ .click(clickListener);
24
- $(this).toggleClass('circle');
25
- });
26
27
  }
28
+ $('.box:last').click(clickListener);
27
29
  </script>
28
30
  ```
29
31
 
30
- このように修正すればよいはずです。JQueryのappend関数は、選択した要素の末尾(要素の内側であることに注意)に要素を追加します。
32
+ このように修正すればよいはずです。JQueryのappend関数は、選択した要素の末尾(要素の内側であることに注意)に要素を追加します。今回の場合は要素の後に追加したいので、after関数が適切です。そして、after関数の戻り値は
31
- 今回の場合は要素の後に追加したいので、after関数が適切です。
32
33
 
33
34
  また、セレクタに:lastをつけたのは1ループにつき要素を1つ増やすためです。倍々に増えていくのが正しい動作ならば消してください。

1

コードのミスを修正

2019/08/30 16:44

投稿

frodo821
frodo821

スコア322

answer CHANGED
@@ -21,7 +21,7 @@
21
21
  $('.box:last')
22
22
  .after('<div class="box"></div>')
23
23
  .click(function () {
24
- this.toggleClass('circle');
24
+ $(this).toggleClass('circle');
25
25
  });
26
26
  }
27
27
  </script>