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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

489閲覧

jQueryのhtml()で文字列が挿入できない

HirakuMorishima

総合スコア29

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/07/06 01:34

jQueryのhtml()メソッドを使用し、指定した部分にhtml()の引数を挿入したいと考えています。しかし、実際に以下のコードを記入したところ挿入できていませんでした。

誤っている部分を教えていただけますよう、お願いいたします。

html

1<tr> 2 <!--品番・品名--> 3 <td>{{Form::text('billing_item[]', $val->billing_item,['class' => 'validate', 'id' => 'billing_item'])}}</td> 4 <!--数量--> 5 <td><input type="text" name="quantity[]" value="{{$val->quantity}}" class="validate quantity" id="quantity"></td> 6 <!--単位--> 7 <td>{{Form::text('unit[]', $val->unit,['class' => 'validate', 'id' => 'unit'])}}</td> 8 <!--単価--> 9 <td><input type="text" name="bill_unit_price[]" value="{{ceil($val->bill_unit_price)}}" class="validate bill_unit_price" id="bill_unit_price"></td> 10 <!--金額--> 11 <td><span class="ans"></span></td> 12 <td><a href="#" data-id="{{$val->id}}" class="waves-effect waves-light btn del">削除</a> 13 </td> 14 {{Form::hidden('bill_id[]', $val->id)}} 15 </tr>

jQuery

1<script> 2 $( '.quantity,.bill_unit_price' ).on('keyup',function() { 3 var $_t = $( this ).parent(); 4 var quantityVal = $_t.find( '.quantity' ); 5 var num01 = quantityVal.val(); 6 var bill_unitVal = $_t.find( '.bill_unit_price' ); 7 var num02 = bill_unitVal.val(); 8 var sum = num01 * num02; 9 $('.ans').html(sum); 10 } ); 11 </script>

また同様にブラウザからソースコードを確認したところ、やはり 「<td><span class=”ans”></span></td>」の部分には何も挿入されておりませんでした。

developer toolも確認しましたがエラーは確認できませんでした。

上記の問題に対して私が行ったのは以下の手法です。

(a)挿入したい<span>タグをclass名ではなくid属性に設定。
変更点→ <td><span class=”ans”></span></td>
変更点→ $(‘#ans’).html(sum);

(b)html()メソッドではなく、text()メソッドを使用する
変化なし

(b)htmlメソッドの引数に直線、変数同士の掛け算を挿入
変更点→ $(‘.ans’).html(num01 * num02);

いずれもエラーは生じず、ただ<td><span>タグ内に表示されないという結果となりました。

ちなみに、num01 * num02という計算自体はデータ上行われているため、
「$(‘.ans’).html(sum);」より上の部分については間違っておらず、

$(‘.ans’).html(sum);の部分、もしくは<td><span class=”ans”></span></td>の部分に誤りがあるのではないか、と考えています。

参考にしたサイト
https://ameblo.jp/linking/entry-10046762170.html
https://teratail.com/questions/127796

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

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

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

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

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

guest

回答3

0

.quantity の親から見た子孫には .bill_unit_price がなく、
.bill_unit_price の親から見た子孫にも .quantity がないので必ずどちらかが存在しない状態となっています。
$_t が何を指しているのか考えてみてください。

jQuery

1 //var $_t = $( this ).parent(); 2 var $_t = $( this ).closest('tr');

https://api.jquery.com/closest/

投稿2019/07/09 04:29

x_x

総合スコア13749

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

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

0

find()はその要素以下の要素すべてを探して取得します。その関係で、戻り値は配列になっています。
ですので、val()で値をとってくる場合は配列の添え字を付けてあげる必要があります。

jQuery

1// bill_unitValは、見つかったのが1つだとしても配列としてセットされる 2var bill_unitVal = $_t.find( '.bill_unit_price' ); 3 4// 配列の1つ目の値だけをとりたい場合は 5var num02 = bill_unitVal[0].val(); 6 7// ただし、そもそもうまく取得できていない可能性もあるので、配列要素が存在するかで値をセットした方が無難 8var num02 = bill_unitVal[0] ? bill_unitVal[0].val() : 0;

quantityも同様です。値が正しく変数にセットされていないので計算も失敗してるという状態です。

投稿2019/07/06 02:45

45_Shingo

総合スコア177

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

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

0

まずは、どこまで実行できているか確認してみましょう。keyupイベント自体が発生していないかもしれません。

投稿2019/07/06 01:41

maisumakun

総合スコア145183

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

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

HirakuMorishima

2019/07/06 01:56

コメントありがとうございます。以下のように「alert($('.ans').html(sum));」とくくったところ、 keyupでalertが出てきましたので、keyupイベント自体は発生しているかと思います。 $(".quantity,.bill_unit_price").on('keyup',function() { var $_t = $( this ).parent(); var quantityVal = $_t.find( '.quantity' ); var num01 = quantityVal.val(); var bill_unitVal = $_t.find( '.bill_unit_price' ); var num02 = bill_unitVal.val(); var sum = num01 * num02; alert($('.ans').html(sum)); });
HirakuMorishima

2019/07/06 01:59 編集

また、alertの部分を「 alert(sum);」に変えてみたところ、「NaN」と出てきてしまいました。 そもそも計算が上手くいっていないのかもしれませんが、それにしても<span>に「NaN」すら出ないことが噛み砕けません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問