回答編集履歴

3

data-*属性のコード追記

2015/09/08 14:00

投稿

think49
think49

スコア18166

test CHANGED
@@ -120,8 +120,76 @@
120
120
 
121
121
 
122
122
 
123
- ここまで書いておいていうのも何ですが、複数のimg要素ノードに `click` を定義するなら親ノードでバブリングを利用してキャプチャするとスマートになります。
123
+ **(2015/09/08 23:00追記)**
124
124
 
125
125
  [data-* 属性](https://developer.mozilla.org/ja/docs/Web/HTML/Global_attributes#data-*)で index を割り振っておくのも一つの手段だと思います。
126
126
 
127
+ ([JSFiddle](http://jsfiddle.net/m627kwag/8/)にサンプルUPしました)
128
+
129
+
130
+
131
+ ```HTML
132
+
133
+ <img src="sample-1.jpg" alt="sample1" data-i="1">
134
+
135
+ <img src="sample-2.jpg" alt="sample2" data-i="2">
136
+
137
+
138
+
139
+ <script>
140
+
141
+ (function () {
142
+
143
+ function handleClick (event) {
144
+
145
+ var img = event.target || event.srcElement; // target要素を得る(Standard || IE8-)
146
+
147
+ console.log(img.getAttribute('data-i'), event.type); // data-*属性を参照
148
+
149
+ }
150
+
151
+
152
+
153
+ function addEvent (element, type, listener) {
154
+
155
+ if (element.addEventListener) { // Standard
156
+
127
- `data-*` 属性は `getAttribute` を使えば、IE8- でも使えます。
157
+ element.addEventListener(type, listener, false);
158
+
159
+ } else if (element.attachEvent) { // IE8-
160
+
161
+ element.attachEvent('on' + type, listener);
162
+
163
+ }
164
+
165
+ }
166
+
167
+
168
+
169
+ function init () {
170
+
171
+ var imgs = document.getElementsByTagName('img');
172
+
173
+
174
+
175
+ for (var i = 0, l = imgs.length; i < l; ++i) {
176
+
177
+ addEvent(imgs[i], 'click', handleClick);
178
+
179
+ }
180
+
181
+ }
182
+
183
+
184
+
185
+ init();
186
+
187
+ }());
188
+
189
+ </script>
190
+
191
+ ```
192
+
193
+
194
+
195
+ img要素の親要素ノードでバブリングを利用してキャプチャすると更にスマートになります。

2

typo

2015/09/08 14:00

投稿

think49
think49

スコア18166

test CHANGED
@@ -124,4 +124,4 @@
124
124
 
125
125
  [data-* 属性](https://developer.mozilla.org/ja/docs/Web/HTML/Global_attributes#data-*)で index を割り振っておくのも一つの手段だと思います。
126
126
 
127
- `data-*' 属性は `getAttribute` を使えば、IE8- でも使えます。
127
+ `data-*` 属性は `getAttribute` を使えば、IE8- でも使えます。

1

IE8- 対応策と data-* 属性による手法

2015/09/08 10:15

投稿

think49
think49

スコア18166

test CHANGED
@@ -45,3 +45,83 @@
45
45
 
46
46
 
47
47
  `handleEvent` は `addEventListener` に備わった機能なので第一引数の `event` オブジェクトと併用できます。
48
+
49
+
50
+
51
+ ---
52
+
53
+
54
+
55
+ **(2015/09/08 19:14追記)**
56
+
57
+ もし、IE8- にも対応させるならクロージャで変数束縛する方法があります。
58
+
59
+ ([JSFiddle](http://jsfiddle.net/m627kwag/6/)にサンプルUPしました。)
60
+
61
+
62
+
63
+ ```JavaScript
64
+
65
+ (function () {
66
+
67
+ function createHandleClick (i) {
68
+
69
+ return function handleClick (event) {
70
+
71
+ console.log(i, event.type);
72
+
73
+ };
74
+
75
+ }
76
+
77
+
78
+
79
+ function addEvent (element, type, listener) {
80
+
81
+ if (element.addEventListener) {
82
+
83
+ element.addEventListener(type, listener, false);
84
+
85
+ } else if (element.attachEvent) {
86
+
87
+ element.attachEvent('on' + type, listener);
88
+
89
+ }
90
+
91
+ }
92
+
93
+
94
+
95
+ function init () {
96
+
97
+ var imgs = document.getElementsByTagName('img');
98
+
99
+
100
+
101
+ for (var i = 0, l = imgs.length; i < l; ++i) {
102
+
103
+ addEvent(imgs[i], 'click', createHandleClick(i));
104
+
105
+ }
106
+
107
+ }
108
+
109
+
110
+
111
+ init();
112
+
113
+ }());
114
+
115
+ ```
116
+
117
+
118
+
119
+ ---
120
+
121
+
122
+
123
+ ここまで書いておいていうのも何ですが、複数のimg要素ノードに `click` を定義するなら親ノードでバブリングを利用してキャプチャするとスマートになります。
124
+
125
+ [data-* 属性](https://developer.mozilla.org/ja/docs/Web/HTML/Global_attributes#data-*)で index を割り振っておくのも一つの手段だと思います。
126
+
127
+ `data-*' 属性は `getAttribute` を使えば、IE8- でも使えます。