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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

JavaScript

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

jQuery

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Q&A

解決済

3回答

926閲覧

JavaScriptにて、複数削除と自動計算がしたい。

Lorraine

総合スコア10

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

JavaScript

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

jQuery

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

0グッド

0クリップ

投稿2021/11/09 13:07

編集2021/11/11 01:44

前提・実現したいこと

1.JavaScriptにて追加された行に対し、同要素をもつ4行の内、何れかの入力欄に数値が入力された後にその行と同一の行の対象の項目に計算結果を反映したい。
*cloneされ行が4行の状態のものを本投稿では記載しております。追加ボタンの動作は本影響外となります。また、動作経緯の為sampleには追加の明記もあります。

2.行削除を行削除ボタンが押された1行のみでなくボタンが押された1行と隣接している行も含め2行削除したい。
※該当ソース箇所(ueとshita)
sampleは以下になります。
https://codepen.io/sougoukanri/pen/GRvGvqW

前提:元画面は2行のみ表示された画面であり、本質問にあたり動作状問題となる画面はclone後の4行になった際の事象になります為本投稿は意図的に4行の状態にしております。

発生している問題・エラーメッセージ

1.cloneして、行を追加している為、自動計算に関しては、正しく反映されない。
1行目は反映される。
問題:行追加後、3行目にて同様の要素箇所では数値を入力してもその行には反映されない。

2.parents('tr').removeであるため、対象1行のみでしか削除されない。

該当のソースコード

html5

1 <tbody id="p2146-2-tbody" class="p2146-2-tbody" name="p2146-2-tbody"> 2 <tr id="ue"> 3 <td><input id="anohi" name="anohimita" value=""> 4 </td> 5 <td> 6 <select class="changeList"> 7 <option>A</option> 8 <option>B</option> 9 <option>C</option> 10 </select> 11 </td> 12 <td id="darenogare">A</td> 13 <td> 14 <button class="upList">⬆️上へ</button>  15 <button class="downList">⬇️下へ</button> 16 </td> 17 <td> 18 </td> 19 </tr> 20 <tr id="shita"> 21 <td><input> 22 </td> 23 <td> 24 <select class="changeList"> 25 <option>A</option> 26 <option>B</option> 27 <option>C</option> 28 </select> 29 </td> 30 <td>A</td> 31 <td> 32 <button class="upList">⬆️上へ</button>  33 <button class="downList">⬇️下へ</button> 34 </td> 35 <td> 36 <button id="hogedelete" type="button" class="hohodelete">行削除</button> 37 </td> 38 </tr> 39 <tr id="ue"> 40 <td><input id="anohi" name="anohimita" value=""> 41 </td> 42 <td> 43 <select class="changeList"> 44 <option>A</option> 45 <option>B</option> 46 <option>C</option> 47 </select> 48 </td> 49 <td id="darenogare">A</td> 50 <td> 51 <button class="upList">⬆️上へ</button>  52 <button class="downList">⬇️下へ</button> 53 </td> 54 <td> 55 </td>

長い為2つに分けます。

html5

1 <td> 2 </td> 3 </tr> 4 <tr id="shita"> 5 <td><input> 6 </td> 7 <td> 8 <select class="changeList"> 9 <option>A</option> 10 <option>B</option> 11 <option>C</option> 12 </select> 13 </td> 14 <td>A</td> 15 <td> 16 <button class="upList">⬆️上へ</button>  17 <button class="downList">⬇️下へ</button> 18 </td> 19 <td> 20 <button id="hogedelete" type="button" class="hohodelete">行削除</button> 21 </td> 22 </tr>

js

1//追加 2$("#add").on("click", function () { 3 $("#p2146-2-table > tbody > tr ").clone(true).appendTo($("#p2146-2-tbody")); 4}); 5 6//削除 7$(document).on("click", ".hohodelete", function () { 8 $(this).parents("tr").remove(); 9}); 10 11$(function () { 12 var value = 200; 13 var tagInputh = $("#anohi"); // 入力対象のinputタグID名 14 var tagOutput = $("#darenogare"); // 出力対象のinputタグID名 15 tagInputh.on("change", function () { 16 var str = $(this).val(); 17 var num = Number(str.replace(/[^0-9]/g, "")); // 整数以外の文字列を削除 18 $(this).val(num); 19 if (num != 0) { 20 //計算のみ 21 var price = num * value; 22 tagOutput.val(price); 23 $("#darenogare").text(price); 24 } 25 }); 26});

試したこと

grop化、clone時のid振り分け

補足情報(FW/ツールのバージョンなど)

HTML5
CSS3
JavaScript
jQuery

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

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

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

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

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

ku__ra__ge

2021/11/09 14:32 編集

質問文の内容から考えると、質問者さんはボタンを押すとなんらかの動作をすると想定しているようですが、提示されたコードをブラウザで表示させてボタンを押しても何も起きません。 質問に記載した問題が再現するコードを提示してください。
Lorraine

2021/11/09 17:51

ご指摘どうも有難うございます。 ブラウザ上で動作し、問題箇所の事象が見れるものへと修正いたしました。
yambejp

2021/11/10 00:28

自動計算の根拠もよくわからないので もっと簡単な例に絞ったほうがよいでしょう
Lhankor_Mhy

2021/11/10 00:48

「押された1行と隣接している行も含め2行削除」とのことですが、隣接行は上下あるはずなので「3行」の間違いだと読みましたが、よろしいですか?
Lorraine

2021/11/10 00:53

失礼しました、曖昧表現でした、隣接行すべてが対象ではなく、あくまでtr行のue,shitaの2行を1セットとして削除したい意になります。
Lhankor_Mhy

2021/11/10 00:55

「同要素を持つ」とはなんですか? 一般的にDOMはツリー構造なので、ある同じ要素を複数の要素が持つことはないです。おそらく、同じ値とかそういう意味だと思いますが、そうだとした場合、どの値を比べたいのでしょうか。
Lhankor_Mhy

2021/11/10 00:57

「対象の項目」とは具体的には何ですか? #darenogare ですか?
guest

回答3

0

自分の行と上の行をまとめて削除するだけなら

javascript

1$(document).on("click", ".hohodelete", function () { 2 $(this).parents("tr").prev().remove(); 3 $(this).parents("tr").remove(); 4});

投稿2021/11/10 01:04

yambejp

総合スコア116734

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

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

Lorraine

2021/11/10 01:16

.prev()で直前の要素を取得して削除すればよかったのですね、ありがとうございます。削除問題に関して解決しました。
yambejp

2021/11/10 08:10

自動計算は計算根拠を明示ください
Lorraine

2021/11/10 09:17

読み飛んでおりました、自動計算のフォーカスのみでの計算根拠はありません、単純に同行列内で入力欄anohiに入力された値に対し、darenogareに計算された値が即時出力されれば理想だと考えております。
guest

0

自己解決

find()での親要素から子要素を取得して、計算することで対応できました。

投稿2021/11/12 05:12

Lorraine

総合スコア10

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

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

0

#anohi #darenogare を単純にクローンしているので、同じIDが複数存在しています。
ID属性は一意なので、想定しているような動作をしない可能性が高いです。

id グローバル属性は、文書全体で一意でなければならない識別子 (ID) を定義します。

id - HTML: HyperText Markup Language | MDN

解決方法ですが、複数存在することが想定される要素は、クラスで識別する方がいいかと思います。

投稿2021/11/10 01:02

Lhankor_Mhy

総合スコア36960

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

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

Lorraine

2021/11/10 01:22

回答どうも有難うございます。クラスの識別の方取り入れこちらで検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問