🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
jQuery

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

HTML

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

Q&A

解決済

2回答

757閲覧

半角0.5全角1でインプットの入力を数えた値を合計し、インプットを削除した場合合計から引きたい

sense6n23rp

総合スコア14

jQuery

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

HTML

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

0グッド

0クリップ

投稿2019/10/10 08:25

編集2019/10/10 10:29

追加削除が可能なinput要素を作って半角(半角英数:123AbCなど)全角(全角かな:明日あさって等)が混ざった状態で入力されているinputの文字数を半角0.5全角1でカウントし数えた値を合計し、またインプットを削除した場合は合計から引きたいです

下記でinputセットを追加・削除しています。

html

1 2//追加するhtmlセット 3<div class="hash_set_template_inst"> 4<div class="hash_block"> 5<input type="text" placeholder="" class="" autocomplete="off" value="#"> 6<button type="button" class="hash_del"><span><i>削除</i></span></button> 7</div></div> 8 9<div class="hash_area fb"> 10<p class="txt_cnt"><span class="fb_txt">0</span>文字</p> 11<div class="hash_fb"> 12<p class="add_area"><button type="button" class="add_hash_btn inst_hash">追加</button></p> 13</div> 14</div>

jquery

1//セットの追加 2 $(".add_hash_btn.inst_hash").on("click",function () { 3 var html = $('.hash_set_template_inst').html(); 4 var hash_set_t = $.parseHTML(html); 5 var append = $(this).parent('.add_area'); 6 append.before(hash_set_t); 7 }); 8//セットの削除 9 $(document).on('click', '.hash_del', function () { 10 var elm = $(this).closest('div'); 11 elm.remove() 12 }); 13 14$(document).on("keyup change",".hash_fb input",function(){ 15 16 var o = $(this); 17 var str = o.val(); 18 var r = 0; 19 for (var i = 0; i < str.length; ++i) { 20 var c = str.charCodeAt(i); 21 if (c >= 0x0 && c <= 0x7f) { 22 r += 1; 23 } else { 24 r += 2; 25 } 26 } 27var all = r/2 28console.log(all) //ここまでで各インプットの全半角数は出ています 29 30var total = 0; 31 $( ".hash_fb input" ).each( function() { 32 total += all 33//ここで合計しているつもりなのですが入力するたびに0からはじまってしまいinputの全角半角も全て1で計算されてしまいます。 34 } ) 35 $( ".fb_txt" ).text(total); 36 37});

またこちらで(https://teratail.com/questions/216377)全半角関係なく1とした場合の合計は解決しています。

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

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

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

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

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

sense6n23rp

2019/10/10 11:51

一度自分で組んだものをhttps://teratail.com/questions/216377でご解答いただき(左記の質問・解答自体やりたいこと全てを含んでいるものではなくそこから自分で組んでいく想定で質問しています)、手を加えて思ったものに近いものへ進めたが詰まってしまった これが「やってほしいことだけを記載した丸投げの質問」にあたるのでしょうか? htmlもjsも載せずに本当にタイトルと質問だけの丸投げであれば納得できますが・・・ またなぜhttps://teratail.com/questions/216377には丸投げといわれなかったのでしょうか?
guest

回答2

0

ベストアンサー

ここで合計しているつもりなのですが入力するたびに0からはじまってしまいinputの全角半角も全て1で計算されてしまいます。

当方でご提示のコードを試してみましたが、現状認識に錯誤があると思われます。そのような動作はしませんでした。

js

1total += all

↑ここでのall変数の中身は、イベントのあったinput要素の文字数ですから、それがinput要素の数だけ足されます。
たとえば、input要素が、

#1
#2
#いろは←これを変更した

という状態でしたら、3.5を3回足すので、3.5*3=10.5になるはずです。
「0からはじまってしまい」というのはたまたまinput要素が空から始まっていただけで、「全角半角も全て1で計算されてしまいます」というのはたまたまinput要素が2つだっただけです。

解決方法は、文字数を要素ごとに取得することです。

投稿2019/10/10 09:10

Lhankor_Mhy

総合スコア36946

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

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

sense6n23rp

2019/10/10 10:35

なるほど。 確かにそのようでした。 と言うことは元の $( document ).on( "keyup change", ".hash input", function() { var total = 0; $( ".hash_ input" ).each( function() { total += $( this ).val().length; } ); $( ".txt" ).text(total); } ); の時点で間違っていたということになりますね
Lhankor_Mhy

2019/10/10 10:39

それは間違っていません。
sense6n23rp

2019/10/10 12:26

ありがとうございます htmlを <input type="text" placeholder="" class="" autocomplete="off" value="#"><span class="tc">0</span> として $(document).on("keyup change",".hash_fb input",function(){ ~~~ ~~~ $(this).next(".tc").text(all); var i = 0 var total = 0; $( ".hash_fb input" ).each( function() { i++; var sub_count = $(".t" + i).text() var result = parseInt(sub_count) total += result } ) $( ".fb_txt" ).text(total); としてみたらできました
guest

0

まずは、あなたのいう半角、というのと、全角というものの定義をはっきりさせる必要がありますね。
それがわからないと答えようがないです。


(追記)
なら、スペース(0x20)から、バッククオート(0x7e)の範囲内の文字を0.5とし、それ以外を1として加算していけばいいということになりますねー

投稿2019/10/10 09:08

編集2019/10/10 11:00
y_waiwai

総合スコア88040

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

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

sense6n23rp

2019/10/10 10:26

半角は半角英数(123AbCなど)全角は全角かな(明日あさって等)です 質問文も分かりにくかったので変更します
y_waiwai

2019/10/10 10:30

おそらく、文字幅に関わるものと思われますが、文字幅が狭いフォントも存在すると思うんですが、英数以外は全角に決め打ちしていいんでしょうか ならはなしははやいんですけどw
sense6n23rp

2019/10/10 10:39

単純に半角入力文字は半角、全角入力文字は全角と言う認識で問題ないです フォントは無視していただいて、また半角カナも無視して頂いて問題ないです
y_waiwai

2019/10/10 11:00

なら、スペース(0x20)から、バッククオート(0x7e)の範囲内の文字を0.5とし、それ以外を1として加算していけばいいということになりますねー
sense6n23rp

2019/10/10 11:43

ですがすでにその部分は var c = str.charCodeAt(i); if (c >= 0x0 && c <= 0x7f) { r += 1; } else { r += 2; } } var all = r/2 で解決していますが他にも書く必要があるというご指摘ですか? それともわざわざrを/2しているというご指摘でしょうか?
y_waiwai

2019/10/10 12:22

そこは間違ってませんが、質問の書いてあるとおりに不具合があるというなら、その他のところが間違ってるんでしょうね
sense6n23rp

2019/10/10 12:55

は? それを聞くのがこの場所ではないのですか? 不具合がないのならここで聞く必要ないですよね。
sense6n23rp

2019/10/10 13:00

すいませんね、あなたのプロフィールから解答一覧を見させていただきました・・・ 以後返信は結構です。
y_waiwai

2019/10/10 13:06

別に私は返信を遠慮する義理はないのでそっちでどーにかしましょうねっw
sense6n23rp

2019/10/10 13:22

ではあなたには頭をどうにかしてもらいますね
y_waiwai

2019/10/10 13:24

いやー、頭をどうにかする義理もないんですがwこっちきてやります?w
sense6n23rp

2019/10/10 13:26

いいですよ。 まずあなたの言う「こっち」というのの定義をはっきりする必要がありますね。 それがわからないと行きようがないです。
y_waiwai

2019/10/10 13:29

うん、行きようがないものはしようがないですもんねw
sense6n23rp

2019/10/10 13:35

どこに行けばいいか教えてくれないのでしょうか? 結局あなたはどの質問にもまともに解答しないのですね。
y_waiwai

2019/10/10 13:38

そうですよ? 解答を出すといったことはないですし、出すつもりで回答してるわけでもないですねw
sense6n23rp

2019/10/10 13:41

暇なんですね。 私はいまこの質問の件解決できたので手があきました。 ただもう少ししたら仕事に戻りますね。
y_waiwai

2019/10/10 13:43

そりゃヒマですよ。 そうじゃなかったらこんなところでたむろってません。 おつかれさんです。がんばってください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問