質問編集履歴

7

最終的な成果物を追加しました。

2017/09/26 07:53

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -437,3 +437,157 @@
437
437
 
438
438
 
439
439
  ```
440
+
441
+ ###成果物
442
+
443
+ ```javascript
444
+
445
+ //呼び出し側
446
+
447
+ $(function() {
448
+
449
+ //グループセレクタ
450
+
451
+ var groupA = $('.mod-usual #selectRoast div');
452
+
453
+ var groupB = $('.mod-usual #selectBeans div');
454
+
455
+ //ボタンのenable・disableの切り替え
456
+
457
+    $(groupA).btnControl(1, 1, 0);
458
+
459
+    $(groupB).btnControl(1, 0, 0);
460
+
461
+
462
+
463
+ });
464
+
465
+
466
+
467
+ //プラグイン側
468
+
469
+ $(function() {
470
+
471
+ //defaultは「定期商品」ボタングループは非表示
472
+
473
+ $('.groupB').css('display', 'none');
474
+
475
+
476
+
477
+ //「通常商品」と「定期商品」の表示切替
478
+
479
+ $('.btn-a').on('click', function() {
480
+
481
+ $('.mod-usual').show();
482
+
483
+ $('.mod-regular').hide();
484
+
485
+ });
486
+
487
+ $('.btn-b').on('click', function() {
488
+
489
+ $('.mod-usual').hide();
490
+
491
+ $('.mod-regular').show();
492
+
493
+ });
494
+
495
+
496
+
497
+ //選択状態のボタン
498
+
499
+ $("#groupA div, #groupB div").on("click", function() {
500
+
501
+ var id = $(this).parent();
502
+
503
+ var length = $(id).find(".button").length;
504
+
505
+ var num = $(id).find(this).data("item");
506
+
507
+
508
+
509
+ for (i = 0; i < length + 1; i++) {
510
+
511
+ $(id).find('.is-decision').removeClass('is-decision').addClass("is-cancel").fadeTo(500, 0.6);
512
+
513
+ }
514
+
515
+
516
+
517
+ $(id).find('[data-item="' + num + '"]').removeClass('is-cancel').addClass('is-decision').fadeTo(250, 1);
518
+
519
+ });
520
+
521
+ });
522
+
523
+
524
+
525
+ // enable,disableの判別
526
+
527
+ (function($) {
528
+
529
+ $.fn.btnControl = function() {
530
+
531
+ var btnDecision = Array.prototype.slice.call(arguments);
532
+
533
+ return this.each(function(index, btnObjects) {
534
+
535
+ if (btnDecision[index]) {
536
+
537
+ $(btnObjects).addClass('button-click').removeClass('button-noclick');
538
+
539
+ } else {
540
+
541
+ $(btnObjects).removeClass('button-click').addClass('button-noclick');
542
+
543
+ }
544
+
545
+ });
546
+
547
+ };
548
+
549
+ })(jQuery);
550
+
551
+ ```
552
+
553
+ ```css
554
+
555
+ .button-click,
556
+
557
+ .is-cancel {
558
+
559
+ border: 1px solid #332821;
560
+
561
+ color: #332821;
562
+
563
+ cursor: pointer;
564
+
565
+ box-shadow: 0px 0px 5px #332821;
566
+
567
+ border-radius: 5px;
568
+
569
+ -webkit-border-radius: 5px;
570
+
571
+ -moz-border-radius: 5px;
572
+
573
+ opacity: 0.8 !important;
574
+
575
+ }
576
+
577
+
578
+
579
+ .button-noclick {
580
+
581
+ pointer-events: none;
582
+
583
+ }
584
+
585
+
586
+
587
+ .is-decision {
588
+
589
+ background-color: #eeeeee;
590
+
591
+ }
592
+
593
+ ```

6

試したこと2を編集しました。

2017/09/26 07:53

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -386,7 +386,7 @@
386
386
 
387
387
 
388
388
 
389
- this.each(function(btnObjects) {
389
+ this.each(function() {
390
390
 
391
391
  if (btnDecision == 1) {
392
392
 

5

試したこと2を追記しました。

2017/09/21 08:45

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -325,3 +325,115 @@
325
325
  });
326
326
 
327
327
  ```
328
+
329
+ ###試したこと2
330
+
331
+ ```javascript
332
+
333
+
334
+
335
+
336
+
337
+ $(function() {
338
+
339
+ //defaultで「商品グループB」ボタングループは非表示
340
+
341
+ $('.groupB').css('display', 'none');
342
+
343
+
344
+
345
+ //「商品グループA」と「商品グループB」の表示切替
346
+
347
+ $('.btn-a').on('click', function() {
348
+
349
+ $('.groupA').show();
350
+
351
+ $('.groupB').hide();
352
+
353
+ });
354
+
355
+ $('.btn-b').on('click', function() {
356
+
357
+ $('.groupA').hide();
358
+
359
+ $('.groupB').show();
360
+
361
+ });
362
+
363
+
364
+
365
+ //ボタンの非活性
366
+
367
+ function btnDisable(e) {
368
+
369
+ e.preventDefault();
370
+
371
+ return false;
372
+
373
+ }
374
+
375
+
376
+
377
+ });
378
+
379
+
380
+
381
+ (function($) {
382
+
383
+ //プラグイン定義
384
+
385
+ $.fn.btnControl = function(btnDecision) {
386
+
387
+
388
+
389
+ this.each(function(btnObjects) {
390
+
391
+ if (btnDecision == 1) {
392
+
393
+ $(this).addClass('button-click');
394
+
395
+ } else if (btnDecision == 0) {
396
+
397
+ element.onmousedown = function (e){event.preventDefault()};
398
+
399
+ }
400
+
401
+ });
402
+
403
+
404
+
405
+ //【確認用】クリックイベントがキャンセルされているか
406
+
407
+ $(this).click(function() {
408
+
409
+ alert('クリックイベントチェック');
410
+
411
+ });
412
+
413
+
414
+
415
+ };
416
+
417
+ })(jQuery);
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+ //ターゲット
426
+
427
+ var groupA = $('.groupA #selectOption1 div');
428
+
429
+
430
+
431
+ $(function() {
432
+
433
+ $(groupA).btnControl(1, 0, 0);
434
+
435
+ });
436
+
437
+
438
+
439
+ ```

4

試したことを編集しました。

2017/09/21 08:41

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -258,13 +258,13 @@
258
258
 
259
259
 
260
260
 
261
- //プラグイン側
261
+ //プラグイン側
262
262
 
263
263
  (function($) {
264
264
 
265
265
  //プラグイン定義
266
266
 
267
- $.fn.btnControl = function(btnControl) {
267
+ $.fn.btnControl = function(btnDecision) {
268
268
 
269
269
 
270
270
 
@@ -278,23 +278,19 @@
278
278
 
279
279
 
280
280
 
281
- function btnControl(btnObjects) {
281
+ return this.each(function(btnObjects) {
282
-
283
- for (var $i = 0; $i < arguments.length; $i++) {
282
+
284
-
285
- if (btnDecision == 1) {
283
+ if (btnDecision == 1) {
286
-
284
+
287
- $(this).addClass('button-click');
285
+ $(this).addClass('button-click');
288
-
286
+
289
- } else if (btnDecision == 0) {
287
+ } else if (btnDecision == 0) {
290
-
288
+
291
- return false;
289
+ return false;
292
-
293
- }
294
290
 
295
291
  }
296
292
 
297
- }
293
+ });
298
294
 
299
295
 
300
296
 
@@ -308,17 +304,15 @@
308
304
 
309
305
 
310
306
 
311
- //メソッドチェーン対応(thisを返す)
312
-
313
- return (this);
314
-
315
307
  };
316
308
 
317
309
  })(jQuery);
318
310
 
319
-
320
-
311
+
312
+
313
+
314
+
321
- //呼び出し側
315
+ //呼び出し側
322
316
 
323
317
  var groupA = $('.groupA #selectOption1 div');
324
318
 
@@ -330,6 +324,4 @@
330
324
 
331
325
  });
332
326
 
333
-
334
-
335
327
  ```

3

試したことを編集しました。

2017/09/21 06:46

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -256,52 +256,80 @@
256
256
 
257
257
  ```javascript
258
258
 
259
+
260
+
259
- //プラグイン側
261
+ //プラグイン側
260
262
 
261
263
  (function($) {
262
264
 
263
- //プラグイン定義
265
+ //プラグイン定義
264
-
266
+
265
- $.fn.btnControl = function(btnProp) {
267
+ $.fn.btnControl = function(btnControl) {
266
-
268
+
269
+
270
+
267
- //対象セレクタの中のデータ属性を探したい
271
+ //enable,disable判別
268
-
272
+
269
- var btnProp;
273
+ var btnDecision;
274
+
270
-
275
+ //対象のボタンを格納
276
+
271
-
277
+ var btnObjects = $(this).data('item');
278
+
279
+
280
+
272
-
281
+ function btnControl(btnObjects) {
282
+
283
+ for (var $i = 0; $i < arguments.length; $i++) {
284
+
273
- if (btnProp == 1) {
285
+ if (btnDecision == 1) {
274
-
286
+
275
- $(this).addClass('button-click');
287
+ $(this).addClass('button-click');
276
-
288
+
277
- } else if (btnProp == 0) {
289
+ } else if (btnDecision == 0) {
278
-
279
- e.preventDefault();
290
+
280
-
281
- return false;
291
+ return false;
292
+
293
+ }
282
294
 
283
295
  }
284
296
 
297
+ }
298
+
299
+
300
+
301
+ //【確認用】クリックイベントがキャンセルされているか
302
+
303
+ $(this).click(function() {
304
+
305
+ alert('クリックイベントチェック');
306
+
307
+ });
308
+
309
+
310
+
285
- //メソッドチェーン対応(thisを返す)
311
+ //メソッドチェーン対応(thisを返す)
286
-
312
+
287
- return (this);
313
+ return (this);
288
-
314
+
289
- };
315
+ };
290
316
 
291
317
  })(jQuery);
292
318
 
293
- </script>
319
+
294
-
295
-
296
-
320
+
297
- //呼び出し側
321
+ //呼び出し側
322
+
323
+ var groupA = $('.groupA #selectOption1 div');
324
+
325
+
298
326
 
299
327
  $(function() {
300
328
 
301
- $('.groupA #selectOption1 div').btnControl(1);
329
+ $(groupA).btnControl(1, 0, 0);
302
330
 
303
331
  });
304
332
 
305
-
333
+
306
334
 
307
335
  ```

2

試したことを編集しました

2017/09/21 04:26

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -256,32 +256,52 @@
256
256
 
257
257
  ```javascript
258
258
 
259
+ //プラグイン側
260
+
259
- (function($) {
261
+ (function($) {
262
+
260
-
263
+ //プラグイン定義
264
+
261
- $.fn.groupAop1Control = function(decision) {
265
+ $.fn.btnControl = function(btnProp) {
266
+
262
-
267
+ //対象のセレクタの中のデータ属性を探したい
268
+
263
- var decision = 0;
269
+ var btnProp;
264
-
265
-
266
-
270
+
271
+
272
+
267
- if(decision = 0){
273
+ if (btnProp == 1) {
274
+
268
-
275
+ $(this).addClass('button-click');
276
+
277
+ } else if (btnProp == 0) {
278
+
269
- e.preventDefault();//クリックイベントをキャンセル
279
+ e.preventDefault();
270
-
280
+
271
- return false;
281
+ return false;
272
-
282
+
273
- }
283
+ }
274
-
284
+
275
- else if(decision = 1){
285
+ //メソッドチェーン対応(thisを返す)
276
-
277
- $(this).addClass('button-click');//ボタンが「enable」、選択できる状態のクラス
286
+
278
-
279
- }
280
-
281
- return (this);
287
+ return (this);
282
-
288
+
283
- };
289
+ };
284
-
290
+
285
- })(jQuery);
291
+ })(jQuery);
292
+
293
+ </script>
294
+
295
+
296
+
297
+ //呼び出し側
298
+
299
+ $(function() {
300
+
301
+ $('.groupA #selectOption1 div').btnControl(1);
302
+
303
+ });
304
+
305
+
286
306
 
287
307
  ```

1

困っているところ・躓いているところと、試したことについてを追記をしました。

2017/09/20 15:38

投稿

freedomman
freedomman

スコア25

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,15 @@
1
+ ###困っているところ・躓いているところ
2
+
3
+ データ属性が連番で増えていくこと想定したプログラムを組みたいのですが、
4
+
5
+ 繰り返し処理を複数要素に対してかけるところから躓いております。
6
+
7
+ また、関数の引数に対しての条件分岐の方法も模索しております。
8
+
9
+
10
+
11
+
12
+
1
13
  ###前提・実現したいこと
2
14
 
3
15
  ボタングループの活性、非活性の制御ができるJqueryのプラグイン化を考えております。
@@ -239,3 +251,37 @@
239
251
  }
240
252
 
241
253
  ```
254
+
255
+ ###試したこと
256
+
257
+ ```javascript
258
+
259
+ (function($) {
260
+
261
+ $.fn.groupAop1Control = function(decision) {
262
+
263
+ var decision = 0;
264
+
265
+
266
+
267
+ if(decision = 0){
268
+
269
+ e.preventDefault();//クリックイベントをキャンセル
270
+
271
+ return false;
272
+
273
+ }
274
+
275
+ else if(decision = 1){
276
+
277
+ $(this).addClass('button-click');//ボタンが「enable」、選択できる状態のクラス
278
+
279
+ }
280
+
281
+ return (this);
282
+
283
+ };
284
+
285
+ })(jQuery);
286
+
287
+ ```