• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:チェックボックスの値について)

チェックボックスの値の加工で悩んでいます

このQ&Aのポイント
  • チェックボックスの値の加工方法についての質問です。
  • 現在の値を変数に入れておいて、forループの中で前の値と比較し、重複している文言を表示しないようにしたいです。
  • 参考のソースコードを提示しており、その中で重複を判定する処理があります。しかし、うまく機能していないようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.3

つまり前と今を比較して、国県区名の二行を表示する可否を判断するのですね。 問題点として、 1. 国県区名と町名の行の編集を一緒くたにしている。バグの遠因 2. 前回データの保存が失敗している 問題点を直して、ちょっぴりアレンジしてみました function textcopy(){ var words = [], naiyo = ''; var vals = document.forms['f'].elements['a1']; for (var i=0; i<vals.length; i++) { if (vals[i].checked) { var source = vals[i].value; var kekka = source.split("*"); if (kekka[0] != words[0] || kekka[1] != words[1] || kekka[2] != words[2]) { // 前と比較して、国県区が一つでも違えば二行分を表示 naiyo += kekka[0] + kekka[1] + '\n ' + kekka[2] + '\n'; } naiyo += ' ・'+ kekka[3] + '\n'; // 比較せずとも必ず町名の一行を表示 words = kekka; // 今回データを、次の前データとするため保存 } } document.f.log.value = naiyo; }

megane5050
質問者

お礼

回答ありがとうございます! Ogre7077様の方法で解決できました! 素晴らしいです! 細かく解説までしていただき本当にありがとうございました。

その他の回答 (2)

回答No.2

徹夜してしまったじゃないか! 後半はぐだぐだです。だれかそこんとこを help! 全角空白は、半角に置換して下さい。 <!DOCTYPE html> <meta charset="utf-8"> <title></title> <body> <script> function A (a) { return a.slice(0) } function B (b) { return b.split("*") } function C (c) { return c.map(B) } var D = C([  "■日本*北海道*××区*ああ町",  "■日本*北海道*××区*いい町",  "■日本*北海道*××区*うう町",  "■日本*北海道*YY区*ええ町",  "■日本*東京都*YY区*AA町",  "■日本*東京都*YY区*BB町",  "■日本*東京都*ZZ区*BB町",  "■日本*東京都*ZZ区*CC町" ]); var E = A(D[0]), F = [A(E)]; for (var G = 1, H; H = D[G++]; )  for (var I=[], J = 0, K; K = H[J]; J++)   if (E[J] == K)    I.push ('');   else {    E[J] = K;    F.push (J<3 ? A(H): I.concat (H.slice (J)));    break;   } // 以下ぐだぐだ var L = ['', '\n\t', '\n\t\t・', '']; function M (N, O, P) {  return (N || O)? O+L[P]+N: N; } function Q (R) { return R.reduceRight (M, '') }; alert (F.map(Q).join ('\n').replace (/\s{4}/gm,"\n")); </script>

megane5050
質問者

お礼

回答ありがとうございます!! わわわ徹夜?! お体大丈夫ですか? 素晴らしいアイディアありがとうございます!

回答No.1

まず、ケアレスミスが無い状態で投稿しましょう。次のようなデバック用コードを入れて見れください。こうやって、おかしかったら、Line単位で値のチェックするのがデバックの基本です alert("befor i=" +i+ " kekka[2]=[" + kekka[2] + "] word03= [" + word03 + "]");    if( kekka[2] == word03 ){ alert("hit i=" +i+ " kekka[2]=[" + kekka[2] + "] word03= [" + word03 + "]");    kekka[2]="";    }

megane5050
質問者

お礼

回答ありがとうございます! すいません!! 動かなかったソースを張り付けたのは、 IFを使ってやる方向でよいのかどうか知りたかったので途中のものを張ってしまいました。 ありがとうございました。

関連するQ&A