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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1424閲覧

jspでのカウントアップ処理について

Bobsup

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/10/26 08:43

編集2022/10/27 08:35

jspファイル内での質問です。

JSP

1<table> 2 <thead> 3 <tr> 4 <th>ID</th> 5 <th>商品名</th> 6 <th>サイズ</th> 7 <th>数量</th> 8 <th">単価</th> 9 </tr> 10 </thead> 11 // DBのレコード分繰り返す 12 <% 13 int i = 1; 14 for(Item item : itemList) { 15 %> 16 <tbody> 17 <tr> 18  <td><%= item.getItemId() %></td> 19 <td style="text-align: left"><%= item.getItemName() %><input type="hidden" name="itemName"></td> 20 <td><%= item.getSize() %></td> 21 <td > 22 <span id="q<%= i %>">0</span> 23 <input type="button" value="🔻" id="btnSub<%= i %>"/> 24 <input type="button" value="🔺" id="btnAdd<%= i %>"/> 25                                  </td> 26 <td><%= item.getPrice%></td> 27 </tr> 28 </tbody> 29 <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script> 30 <script type="text/javascript"> 31 var nowCount<%= i %> = $("#q<%= i %>").html() 32 nowCount<%= i %> = parseInt(nowCount<%= i %>); 33 if(nowCount<%= i %> < 20){ 34 // カウントアップ 35 var up<%= i %> = document.getElementById('btnAdd<%= i %>'); 36 up<%= i %>.onclick = function (){ 37 var thisCount<%= i %> = $("#q<%= i %>").html(); 38 thisCount<%= i %> = parseInt(thisCount<%= i %>); 39 thisCount<%= i %> = thisCount<%= i %> + 1; 40 $("#q<%= i %>").html(thisCount<%= i %>); 41 } 42 }else if( nowCount<%= i %> > 0){ 43 // カウントダウン 44 var dw<%= i %> = document.getElementById('btnSub<%= i %>'); 45 dw<%= i %>.onclick = function (){ 46 var thisCount<%= i %> = $("#q<%= i %>").html(); 47 thisCount<%= i %> = parseInt(thisCount<%= i %>); 48 thisCount<%= i %> = thisCount<%= i %> - 1; 49 $("#q<%= i %>").html(thisCount<%= i %>); 50 } 51 } 52 </script> 53 <% 54 i++; 55 } 56 %> 57</table>

「数量」を範囲指定(0〜20)したい場合、上記のコードで合ってると思うのですが、指定範囲外もカウントが続いてしまいます。
どのような原因が考えられるでしょうか?

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

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

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

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

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

m.ts10806

2022/10/26 09:08

提示のコードだけだと再現できません。 ボタンに対する処理コードも含めて一通り提示してください。
Bobsup

2022/10/26 09:38

script内処理内容のコード全てをご教授いただきたいです。
m.ts10806

2022/10/26 09:42

それは質問ではなく作業依頼となってしまうので、誰も答えないと思います。 「どう作っても一番上の行しかボタンが反応しなくて困っています。」と仰っていますし、そのコードを提示して、問題点をアドバイスもらう形をとってください。
Bobsup

2022/10/26 09:55

失礼いたしました。 書き加えました。
jimbe

2022/10/26 16:24

java と javascript は関係ありません。
m.ts10806

2022/10/26 20:50

jimbeさん コードからするとサーバーサイドがJava、VIEWがJSPで、要素をJavaScriptで操作しようとしているので、 無関係ではないと思います。
guest

回答1

0

<input type="button" id="countUp" value="カウントアップ" /> <input type="button" id="countDown" value="カウントダウン"/>

HTMLのIDとJavaScriptで指定しているIDが一致していないのが気になりますが、
HTMLの規則として、IDは同一ページ内で重複不可です。
ループで作っているなら全て同じIDになっているはずです。
そこでイベントが最初のボタンにのみ適用された状態になっているのでしょう。

例えばclassを振ってgetElementsByClassName()もしくはquerySelectorAll()で取得した要素リストをループしてそれぞれにイベント振りましょう。

投稿2022/10/26 10:13

m.ts10806

総合スコア80850

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

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

Bobsup

2022/10/26 12:30

<label class="count">0</label> <input type="button" id="btn_count_up" class="count" value="カウントアップ" /> <input type="button" id="btn_reset" class="count" value="カウントダウン"/> とした場合 document.getElementsByClassName('count'); これをどのようにしてリストでループするのですか?
m.ts10806

2022/10/26 20:49 編集

提示したリンクを見られたのでしょうか。 そもそも getElementsByClassName()は配列風オブジェクト querySelectorAll()は要素のリスト で取得するので、リストになってます。
Bobsup

2022/10/27 01:28 編集

scriptの中を変えてみた(カウントアップのみの機能)のですが、これを書けばカウントアップはできるってことですか?
m.ts10806

2022/10/27 01:29

定義されてない変数をいきなり使わずにリストの各要素を使ってくださいね。 count_valueという変数の役割もきちんと考えてください。全てで共有にするのかどうかとか。 そこは仕様なので決めてください。 あと、まずやってみましょう。
Bobsup

2022/10/27 08:37

数量変更は出来ました!ありがとうございます! 質問を追加しましたのでぜひよろしければ、ご教授願います。
m.ts10806

2022/10/27 08:42

回答の方針からは離れて独自に実装進められてしまってるので、何とも。
m.ts10806

2022/10/27 08:45

方針とはずれてるのであれですが(直接解決策ではないですが) ・件数分jQuery何度も読み込ませてるのは悪手
Bobsup

2022/10/27 11:46

ですよね... なぜ何度も読み込ませることが悪手なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問