質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

662閲覧

【jQuery】プラスマイナスのボタンを商品ごとに動くようにしたい。

KAZUHA

総合スコア15

Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2022/06/19 07:38

編集2022/06/19 07:39

お世話になります。
ショッピングサイトで数量カウンターを作っているのですが、
一つの商品のプラスを押すと他の商品まで連動してしまい困っております。
商品ごとにプラスマイナスボタンを動かしたいです。
.btnspinnerが同じだからだと思うのですが、
thisで個別に認識したいのですが、なかなかうまくいきません。
アドバイスいただけると幸いです。宜しくお願い致します。

実際の動き
https://codepen.io/moge_penguin/pen/abqxYMy

pug

1ul 2 li.one 3 div.ImageMain.ImageMain_s 4 div.Detail 5 p.s_title りんご 6 p.s_price ¥100 7 form(name="form2") 8 div(class="spinner_area") 9 input.count(type="number",name="りんご", value="1", data-max="100", data-min="1") 10 input.btnspinner(type="button", value="+", data-cal="1", data-target=".count") 11 input.btnspinner(type="button", value="-", data-cal="-1",data-target=".count") 12 button.item_cart_btn.js_cart_btn(data-name="りんご" data-price="100") カートに入れる 13 button.item_heart_btn.js_heart_btn(data-name="りんご" data-price="100") お気に入り登録 14 li.two 15 div.Detail 16 p.s_title にんじん 17 p.s_price ¥120 18 form(name="form2") 19 div(class="spinner_area") 20 input.count(type="number",name="にんじん", value="1", data-max="100", data-min="1") 21 input.btnspinner(type="button", value="+", data-cal="1", data-target=".count") 22 input.btnspinner(type="button", value="-", data-cal="-1", data-target=".count") 23 button.item_cart_btn.js_cart_btn(data-name="にんじん" data-price="120") カートに入れる 24 button.item_heart_btn.js_heart_btn(data-name="にんじん" data-price="120") お気に入り登録

jQuery

1 2$(function(){ 3 let arySpinnerCtrl = []; 4 let spin_speed = 20; //変動スピード 5 6 //長押し押下時 7 $(' .btnspinner').on('click', function(e){ 8 if(arySpinnerCtrl['interval']) return false; 9 let target = $(this).data('target'); 10 arySpinnerCtrl['target'] = target; 11 arySpinnerCtrl['timestamp'] = e.timeStamp; 12 arySpinnerCtrl['cal'] = Number($(this).data('cal')); 13 //クリックは単一の処理に留める 14 if(e.type == 'click'){ 15 spinnerCal(); 16 arySpinnerCtrl = []; 17 return false; 18 } 19 //長押し時の処理 20 setTimeout(function(){ 21 //インターバル未実行中 + 長押しのイベントタイプスタンプ一致時に計算処理 22 if(!arySpinnerCtrl['interval'] && arySpinnerCtrl['timestamp'] == e.timeStamp){ 23 arySpinnerCtrl['interval'] = setInterval(spinnerCal, spin_speed); 24 } 25 }, 500); 26 }); 27 28 //長押し解除時 画面スクロールも解除に含む 29 $(document).on('touchend mouseup scroll', function(e){ 30 if(arySpinnerCtrl['interval']){ 31 clearInterval(arySpinnerCtrl['interval']); 32 arySpinnerCtrl = []; 33 } 34 }); 35 36 //変動計算関数 37 function spinnerCal(){ 38 let target = $(arySpinnerCtrl['target']); 39 let num = Number(target.val()); 40 num = num + arySpinnerCtrl['cal']; 41 if(num > Number(target.data('max'))){ 42 target.val(Number(target.data('max'))); 43 }else if(Number(target.data('min')) > num){ 44 target.val(Number(target.data('min'))); 45 }else{ 46 target.val(num); 47 } 48 } 49 50}); 51

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

js

1 function spinnerCal(){ 2 let target = $(arySpinnerCtrl['target']);

どのスピンボタンが押されてもここでは $('.count') が実行されるので、ページ中のすべての class="count" が対象になってしまいます。

js

1 let target = $(this).data('target'); 2 arySpinnerCtrl['target'] = target;

ここで対象のクラス名を入れるのではなく、対象の要素そのものを入れた方がよいでしょう。arySpinnerCtrl['target'] = this.parentNode.querySelector(target); のような感じでしょうか。

投稿2022/06/19 23:53

int32_t

総合スコア20878

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KAZUHA

2022/06/20 02:12 編集

ご回答・解説していただきありがとうございます! this.parentNode.querySelectorでその対象の要素を選択できることを知らなかったので 大変勉強になりました(^^) 解決いたしました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問