- ベストアンサー
チェックボックスの値の加工で悩んでいます
- チェックボックスの値の加工方法についての質問です。
- 現在の値を変数に入れておいて、forループの中で前の値と比較し、重複している文言を表示しないようにしたいです。
- 参考のソースコードを提示しており、その中で重複を判定する処理があります。しかし、うまく機能していないようです。
- みんなの回答 (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; }
その他の回答 (2)
- babu_babu_baboo
- ベストアンサー率33% (1/3)
徹夜してしまったじゃないか! 後半はぐだぐだです。だれかそこんとこを 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>
お礼
回答ありがとうございます!! わわわ徹夜?! お体大丈夫ですか? 素晴らしいアイディアありがとうございます!
- lupin-333333
- ベストアンサー率31% (294/933)
まず、ケアレスミスが無い状態で投稿しましょう。次のようなデバック用コードを入れて見れください。こうやって、おかしかったら、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]=""; }
お礼
回答ありがとうございます! すいません!! 動かなかったソースを張り付けたのは、 IFを使ってやる方向でよいのかどうか知りたかったので途中のものを張ってしまいました。 ありがとうございました。
お礼
回答ありがとうございます! Ogre7077様の方法で解決できました! 素晴らしいです! 細かく解説までしていただき本当にありがとうございました。