回答編集履歴

2

訂正

2020/01/20 21:31

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -62,11 +62,11 @@
62
62
 
63
63
  $(function() {
64
64
 
65
- $("#list1").get(0).onclick = something;
66
-
67
65
 
68
66
 
69
67
  // 1. イベント伝搬するので 要素に引数に変わる値を設定しておく例
68
+
69
+ $("#list1").get(0).onclick = something;
70
70
 
71
71
  let elm1 = $("#list1").get(0);
72
72
 
@@ -92,7 +92,7 @@
92
92
 
93
93
  let elmId = event.target.id;
94
94
 
95
- console.log("test", params[elmId] ); // "test", { "list1": "hogehoge" }
95
+ console.log("test", params[elmId] ); // "test", "hogehoge"
96
96
 
97
97
  }
98
98
 

1

コメントを受けて追記

2020/01/20 21:31

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -21,3 +21,123 @@
21
21
  ご質問の ``$("#list1").onclick = something();`` は
22
22
 
23
23
  リンク先に倣うなら、``$("#list1").get(0).onclick = something;`` と書かれているはずです。
24
+
25
+
26
+
27
+ #追記)
28
+
29
+ コメント欄の質問より
30
+
31
+
32
+
33
+ > $("#list1")と$("#list1").get(0)で取得されるものの違い(中略)下記の認識で合っていますか?
34
+
35
+
36
+
37
+ その認識で合っています。
38
+
39
+
40
+
41
+ 手っ取り早くjQueryの実装を確認する方法:
42
+
43
+ 1. ``console.log($("#list1"))``
44
+
45
+ 2. ``console.log($("#list1").get(0))``
46
+
47
+
48
+
49
+ > 引数付きで関数を呼び出すような処理を付与する
50
+
51
+
52
+
53
+ HTMLでの属性記述とは異なり、JavaScriptでは DOM を介することになります。
54
+
55
+ 全ての DOM要素の基底オブジェクトとなる ``EventTarget`` の実装に従います。
56
+
57
+ (イベントハンドラの第一引数 に渡されるのが ``event`` オブジェクト)
58
+
59
+
60
+
61
+ ```javascript
62
+
63
+ $(function() {
64
+
65
+ $("#list1").get(0).onclick = something;
66
+
67
+
68
+
69
+ // 1. イベント伝搬するので 要素に引数に変わる値を設定しておく例
70
+
71
+ let elm1 = $("#list1").get(0);
72
+
73
+ elm1.setAttribute("my-arg","hogehoge");
74
+
75
+ function something( event ) {
76
+
77
+ console.log("test", event )
78
+
79
+ console.log( event.target === elm1 ); // true
80
+
81
+ console.log( event.target.getAttribute("my-arg") ); // "hogehoge"
82
+
83
+ }
84
+
85
+ /* イベントハンドラから参照できるスコープ内で引数に変わる値を保持する方法も
86
+
87
+ let params = { "list1": "hogehoge" }
88
+
89
+ $("#list1").get(0).onclick = something;
90
+
91
+ function something( event ) {
92
+
93
+ let elmId = event.target.id;
94
+
95
+ console.log("test", params[elmId] ); // "test", { "list1": "hogehoge" }
96
+
97
+ }
98
+
99
+ */
100
+
101
+
102
+
103
+ // enclosure で引数を受け、 closure をイベントハンドラとして返却する
104
+
105
+ $("#list2").get(0).onclick = enclosure("hogehoge", 1, true);
106
+
107
+ function enclosure( ...args ){
108
+
109
+ return function closure(event) {
110
+
111
+ console.log( event );
112
+
113
+ console.log("test", args); // "test",["hogehoge", 1, true]
114
+
115
+ }
116
+
117
+ }
118
+
119
+
120
+
121
+ // jQuery の data API を使う
122
+
123
+ let argData = { hoge:"HOGE",num:123 };
124
+
125
+ $("#list3")
126
+
127
+ .data( "myArg", argData ) // 伝搬する要素に値を設定
128
+
129
+ .on("click", function(){
130
+
131
+ // クリック時に取り出して確認
132
+
133
+ console.log( $(this).data("myArg") ); // { hoge:"HOGE",num:123 }
134
+
135
+ });
136
+
137
+
138
+
139
+ });
140
+
141
+ ```
142
+
143
+ jQuery では、JavaScript オブジェクトを渡せる data API が最もスマートと言えます。