回答編集履歴

1

attr と prop でのセットの違い

2015/07/15 00:13

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -169,3 +169,103 @@
169
169
 
170
170
 
171
171
  セレクトボックスでどの項目が選択されているかに無関係に、あたかも サンプル2 が選択されているように見えると思います。
172
+
173
+
174
+
175
+ ---
176
+
177
+
178
+
179
+ JunTomizawa さんからコメントで以下の質問があったので補足しておきます。
180
+
181
+
182
+
183
+ > ngyukiさん
184
+
185
+ > 値を取得ではなくセットするのもやはりpropじゃないと違いが出ますか?
186
+
187
+
188
+
189
+ ```lang-html
190
+
191
+ <!DOCTYPE html>
192
+
193
+ <html>
194
+
195
+ <head>
196
+
197
+ <meta charset="UTF-8">
198
+
199
+ <title></title>
200
+
201
+ <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
202
+
203
+ <script>
204
+
205
+ $(function() {
206
+
207
+ $("#attr").click(function() {
208
+
209
+ $('#select option[value=C]').attr("selected", true);
210
+
211
+ });
212
+
213
+ $("#prop").click(function() {
214
+
215
+ $('#select option[value=D]').prop("selected", true);
216
+
217
+ });
218
+
219
+ });
220
+
221
+ </script>
222
+
223
+ </head>
224
+
225
+ <body>
226
+
227
+ <form>
228
+
229
+ <select id="select">
230
+
231
+ <option value="A">A</option>
232
+
233
+ <option value="B">B</option>
234
+
235
+ <option value="C">C</option>
236
+
237
+ <option value="D">D</option>
238
+
239
+ </select>
240
+
241
+ <button type="button" id="attr">attr</button>
242
+
243
+ <button type="button" id="prop">prop</button>
244
+
245
+ <button type="reset">reset</button>
246
+
247
+ </form>
248
+
249
+ </body>
250
+
251
+ </html>
252
+
253
+ ```
254
+
255
+
256
+
257
+ attr ボタンは `attr()` で C を選択、prop ボタンは `prop()` で D を選択します。
258
+
259
+
260
+
261
+ 画面を開いた直後なら attr ボタンは正常に機能しますが、セレクトボックスを適当に切り替えたり prop ボタンを押したりすると attr ボタンは機能しなくなります。
262
+
263
+
264
+
265
+ その後、reset ボタンを押すと、C が選択されます(一度も attr ボタンを押していなければ A にリセットされるはずです)。
266
+
267
+
268
+
269
+ この動きから推測できると思いますが、attr によって変更されるのは項目のデフォルト値です。画面を開いた直後に attr ボタンが効いているように見えるのは、デフォルト値が現在値として参照されているためです。セレクトボックスをユーザーが操作したり、`prop()` で値を変更したりすると、デフォルト値が現在値ではなくなるので、`attr()` が効かなくなります(効かなくなるというか、デフォルト値が変わっても現在値には影響しなくなる)。
270
+
271
+