if文を使用して作成したjavascriptのテーブルが表示されない問題

このQ&Aのポイント
  • JavaScriptのテーブル作成にif文を使用しましたが、思ったように表示されませんでした。
  • テーブル内に成績を表示するためのJavaScriptのコードをif文を使って作成しましたが、正しく表示されません。
  • 問題の数だけテーブルを動的に生成するJavaScriptのコードをif文で作成したが、予想通りの結果が得られません。
回答を見る
  • ベストアンサー

javascriptのテーブル作成についてif文で

javascriptのテーブル作成についてif文で作成しましたが思うように表示されませんでした。 var inner=""; var wrong=0; inner="<table border='2'><caption>成績発表</caption><tr><th>問題</th><th>成績</th></tr>"; for (var mondai_index=0;mondai_index<mondai_max;mondai_index++) { inner+="<tr>"; inner+="<td>"+"問題"+(mondai_index+1)+"</td>"; var user_answer=this.user_answer[mondai_index]; if (user_answer !== undefined) { if (user_answer==this.mondai_data[mondai_index].c) { inner+="<td>正解</td>"; }else{ inner+="<td>不正解</td>"; wrong++; } }else{ inner+="<td>解説文hogehoge</td>"; } inner+="</tr>"; } inner+="</table>"; よろしくお願いします。

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

  • ベストアンサー
回答No.1

if文の中身を確認する前に、テーブルが思うように表示されていない理由を探してみましょう。以下のような点に注意してください。 変数innerの初期値が空文字列になっているか確認してください。それ以外の初期値だと、後続の文字列を足し算する際に想定外の文字列が表示される可能性があります。 mondai_max、user_answer、this.user_answer、this.mondai_dataなど、変数が適切に定義されているか確認してください。もし定義されていない場合、エラーが発生する可能性があります。 this.user_answer[mondai_index]が未定義の場合、代わりに"解説文hogehoge"が表示されるようになっていますが、本当にこれで正しいでしょうか?もし意図した表示内容ではない場合、代わりの文字列を用意してください。 上記の点を確認した上で、if文の中身を見てみましょう。現在のif文は以下のようになっています。 javascript Copy code if (user_answer !== undefined) { if (user_answer==this.mondai_data[mondai_index].c) { inner+="<td>正解</td>"; }else{ inner+="<td>不正解</td>"; wrong++; } }else{ inner+="<td>解説文hogehoge</td>"; } このif文では、user_answerが未定義でない場合に、正解か不正解かを判定しています。もし未定義の場合、"解説文hogehoge"を表示するようになっています。しかし、このif文の外側にあるinner+="<tr>";で行を生成しているため、未定義の場合でも行が生成されてしまいます。このため、"解説文hogehoge"が意図した位置に表示されていない可能性があります。 この問題を解決するには、if文の内側で行を生成するように修正する必要があります。つまり、以下のようにif文の中身を変更する必要があります。 javascript Copy code if (user_answer !== undefined) { if (user_answer == this.mondai_data[mondai_index].c) { inner += "<td>正解</td>"; } else { inner += "<td>不正解</td>"; wrong++; } inner += "</tr>"; // ここで行を閉じる } else { inner += "<td colspan='2'>解説文hogehoge</td></tr>"; // colspanでセルを結合する } 上記の修正を加えることで、問題なくテーブルが生成される

panja2021
質問者

お礼

以下のコード追加でテーブルは表示できました。 ありがとうございました。 } else { inner+="<td>不正解</td>"; } //追加  表示OK inner += "<td colspan='2'>解説文hogehoge</td>"; // colspanでセルを結合する inner+="</tr>"; } inner+="</table>";

その他の回答 (2)

回答No.3

>うまくいかなかったらまた質問しようと思います。 うぃ!

回答No.2

なんかこのソース。見覚えがあるな(笑) 状況もっと教えてもらえれば対応できまっせ!

panja2021
質問者

補足

以前回答していただきお世話になりました。 なんとか自分の力でテーブル表示を解決できました。 csv出力は今、改良中です。うまくいかなかったらまた質問しようと思います。 ありがとうございました。 if (user_answer !== undefined) { if (user_answer==this.mondai_data[mondai_index].c) { //inner+="<td>正解</td>"; //undefinedと表示されます //inner+="<td colspan='2'>"+qakey10[[this.mondai_no].k]; inner+="<td colspan='2'>"+this.mondai_data[mondai_index].k; //inner+="<td colspan='2'>"+this.mondai_data[[this.mondai_no].k]; }else{ //inner+="<td>不正解</td>"; inner+="<td colspan='2'>"+this.mondai_data[mondai_index].k; wrong++; }

関連するQ&A

  • innerHTMLでのテーブル作成

    いつもお世話になっております。 こちらの質問と回答を参考にプログラムを付け足して、リストを作る練習をしています。 http://okwave.jp/qa/q8090793.html テーブル行の先頭に項目名を表示させて、表を分かりやすくしようと思ったのですが、 最後に出力される項目名がそれまでの項目名を上書きしてしまい、 項目名が1個しか表示されないため、テーブルがずれて表示されてしまいます。 50個 金額~~ 100個 金額~~ と表示させるためには、どこを手直ししたら良いのか知恵を貸してください。 よろしくお願いします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>innnerHTMLで自動生成された表を出力したい</title> <style> h2 { margin-bottom:0; color:#900;} table{ border:none; font-size:12px;} table tr th{ padding:5px; width:90px; background:#69F;} table tr td{ padding:5px; text-align:right; background:#9CF;} </style> <script type="text/javascript"> //ラジオボタンのvalue値を取得 var daysRate; var nouki = document.getElementsByName('nouki'); var price = new Array ( 10, 30, 50 ); function getRate() { for ( var i = 0; i < nouki.length; i ++ ) { if ( nouki[i].checked ) { daysRate = nouki[i].value; }}return parseFloat(daysRate);} function calc() { // 選択されているレートを取得 var rate = getRate(); var list_name = new Array('<h2>表1</h2>','<h2>表2</h2>','<h2>表3</h2'); var table_start = "<div><table><tbody>"; var table_head = '<tr><th>入数</th><th>ヘッダー1</th><th>ヘッダー2</th><th>ヘッダー3</th></tr>'; var table_kosuu = ""; var table_td = ""; var table_end = "</tbody></table></div><hr />"; // priceが増えてもロジックをいじる必要がないようにprice.lengthでループ数を制御 for(var i=50; i<=100; i+=50){ if(i==50){ table_kosuu = '<tr><td>' + i + '個</td>'; for ( var j = 0; j < price.length; j ++ ) { if(j < price.length-1){ table_td += '<td>¥' + parseInt(price[j]*i) * rate + '</td>'; } else { table_td += '<td>¥' + parseInt(price[j]*i) * rate + '</td></tr>'; } } } if(i==100){ table_kosuu = '<tr><td>' + i + '個</td>'; for ( var j = 0; j < price.length; j ++ ) { if(j < price.length-1){ table_td += '<td>¥' + parseInt(price[j]*i) * rate + '</td>'; } else { table_td += '<td>¥' + parseInt(price[j]*i) * rate + '</td></tr>'; } } } document.getElementById('priceTableOutput').innerHTML = list_name[0] + table_start + table_head + table_kosuu + table_td; + table_end; } } window.onload = function() { // 読込み後も一度テーブル表示を実行する calc(); } </script> </head> <body> 再計算ボタンを押すと価格表が再計算されます。<br /> <input type="radio" name="nouki" value="1" checked="checked" />通常配達 <input type="radio" name="nouki" value="1.25" />翌日配達 <input type="radio" name="nouki" value="1.5" />当日配達 <input type="button" value="再計算" onClick="calc()"> <div id="priceTableOutput">innerHTMLで、ここに表を出力</div> <br /> </body> </html>

  • テーブルの変数について

    var i; i=10; <table> <tr> <th>見出し</th> <th>見出し</th> </tr> <tr> <td>i<td> <td>data</td> </tr> </table> このようなプログラムを作ったのですが変数の「i」がそのまま表示されてしまうのでどうしたら「i」の中の数字を表示することができるのしょうか。

  • テーブルの変数について

    var i; i=10; <table> <tr> <th>見出し</th> <th>見出し</th> </tr> <tr> <td>i<td> <td>data</td> </tr> </table> このようなプログラムを作ったのですが変数の「i」がそのまま表示されてしまうのでどうしたら「i」の中の数字を表示することができるのしょうか。初心者なのでまだまだわからないことがたくさんありますがよろしくお願いします。

  • javascriptの変数の渡し方

    ラジオボタンで選択した値によって表示するテーブルを変えるフォームを作っています。 AAAは入力ボックスが1つ BBBは入力ボックスが2つ 同じphpへ送信して、入力ボックスへデータは入るのですが、javascriptの値を渡すことが出来ません。 BBBでsubmit後、BBBの入力ボックスを表示することは出来ますでしょうか。 <? echo "<form method=post action=?>"; echo "<input type=radio name='user' onclick='change_user(this.value)' uid='user' value=1"; if($user==1){ echo " checked"; } echo ">AAA"; echo "<input type=radio name='user' onclick='change_user(this.value)' uid='user' value=2"; if($user==2){ echo " checked"; } echo ">BBB"; echo "<br>"; echo "<span id=inner>"; echo "<table>"; echo "<tr>"; echo "<td>AAAのフォーム</td>"; echo "<td><input name=form1 type=text value=$form1></td>"; echo "</tr>"; echo "</table>"; echo "</span>"; echo "<span id=outer>"; echo "<table>"; echo "<tr>"; echo "<td>BBBのフォーム</td>"; echo "<td><input name=form1 type=text value=$form1></td>"; echo "<td><input name=form2 type=text value=$form2></td>"; echo "</tr>"; echo "</table>"; echo "</span>"; echo "<br>"; echo "<input type=submit value=submit>"; echo "</form>"; ?> <script language='javascript'> var inner = document.getElementById('inner'); var outer = document.getElementById('outer'); function change_user (uid) { if (uid == '2') { inner.style.display = 'none'; outer.style.display = ''; } else { inner.style.display = ''; outer.style.display = 'none'; } } change_user(document.getElementById('user').value); </script>

    • ベストアンサー
    • PHP
  • HTMLで文とテーブルの間が空く。

    現在HTMLとCSSでホームページを作成しています。 それで文とテーブルの間に意図しない空欄ができてしまいます。 この理由と対策を教えてください。 HTMLは↓ <div id="contents"> <div id="main"> <h2>会社概要</h2>       <table class="table">       <tr>       <th>社名</th>       <td></td>       </tr>       <tr>       <th>所在地</th>       <td></td>       </tr>       <tr>       <th>代表者</th>       <td></td>       </tr>       <tr>       <th>設立</th>       <td></td>       </tr>       <tr>       <th>資本金</th>       <td></td>       </tr>       <tr>       <th>従業員数</th>       <td></td>       </tr>       <tr>       <th>関連会社</th>       <td></td>       </tr>       </table> </div><!-- main end --> <div id="totop"> <p><a href="#top">ページのトップへ戻る</a></p> </div><!-- totop end --> </div><!-- contents end --> です。 この会社概要<h2>と<table>の間に十数行の空欄ができます。 CSSを取り除いてHTMLだけにしても、こう表示されます。 ご回答お願いします。

    • ベストアンサー
    • HTML
  • テーブルを作成するのですが・・・。

    gooのブログを使用しています。 表を作成するために、HTMLのタグを利用して やってみたのですが、表自体は完成したのですが、 表の外側に書き込んだ文章 (題名とか、補助的な文章など) こちらと表の間がものすごく空いてしまって おかしいことになってしまっています。 間をあけないように文章のすぐ下に表が来るようにするには どのようにすればいいのでしょうか? 今の状態は <table border=1 cellpadding="5"> <tr> <td>○○</td> <td>0</td><td>1</td> <td>2</td><td>3</td><th>4</th> みたいな感じです。 題名にcaptionを使っても対応していないようなので。 ほかに何かあれば教えてください。

  • JavaScriptのtable保存について

    先日時間割り表を作り以下のコードを書きました これをアプリにして自分のスマホに入れたのですがAndroidのためcookieが対応していません そこでlocalStorageを使えば可能ということを聞きました <body background="img/st18.png"> <center> <font style="font-size:30pt;"> <font color="#4795F4"><b><i>Monday</i></b></font> </font> <br><br> <a href="sat.html"><img src="img/blsat.gif" width="50" height="25"></a> <a href="index.html"><img src="img/blhome.gif" width="50" height="25"></a> <a href="tue.html"><img src="img/bltue.gif" width="50" height="25"></a> <form> <br> <table border="3" bordercolor="#4795F4" align="center" bgcolor="#DDFFFA"> <tr align="center"><th>時間</th><th>科目</th><th>教室</th><th>備考</th></tr> <tr align="center"><td width="20" height="80">1</td><td width="70"><span id="sbj1"></span></td> <td width="60"><span id="crm1"></span></td><td width="100"><span id="com1"></span></td> <tr align="center"><td width="20" height="80">2</td><td width="70"><span id="sbj2"></span></td> <td width="60"><span id="crm2"></span></td><td width="100"><span id="com2"></span></td> <tr align="center"><td width="20" height="80">3</td><td width="70"><span id="sbj3"></span></td> <td width="60"><span id="crm3"></span></td><td width="100"><span id="com3"></span></td> <tr align="center"><td width="20" height="80">4</td><td width="70"><span id="sbj4"></span></td> <td width="60"><span id="crm4"></span></td><td width="100"><span id="com4"></span></td> <tr align="center"><td width="20" height="80">5</td><td width="70"><span id="sbj5"></span></td> <td width="60"><span id="crm5"></span></td><td width="100"><span id="com5"></span></td> <span id="testarea"></span> </form> </body> <script> <!-- monaca.viewport({width: 320}); function setCookie(c_name,value,expiredays){ // pathの指定 変数名 var path = location.pathname; // pathをフォルダ毎に指定する場合のIE対策 var paths = new Array(); paths = path.split("/"); if(paths[paths.length-1] != ""){ paths[paths.length-1] = ""; path = paths.join("/"); } // 有効期限の日付 これがないと編集できない var extime = new Date().getTime(); var cltime = new Date(extime + (60*60*24*1000*expiredays)); var exdate = cltime.toUTCString(); // クッキーに保存する文字列を生成 これがないと保存できない var s=""; s += c_name +"="+ escape(value);// 値はエンコードしておく s += "; path="+ path; if(expiredays){ s += "; expires=" +exdate+"; "; }else{ s += "; "; } // クッキーに保存 document.cookie=s; } function getCookie(c_name){ var st=""; var ed=""; if(document.cookie.length>0){ // クッキーの値を取り出す st=document.cookie.indexOf(c_name + "="); if(st!=-1){ st=st+c_name.length+1; ed=document.cookie.indexOf(";",st); if(ed==-1) ed=document.cookie.length; // 値をデコードして返す return unescape(document.cookie.substring(st,ed)); } } return ""; } //変数設定 if(getCookie('mon_sects1')){var sect1 = getCookie('mon_sects1');}else{var sect1 = "科目1,教室,備考";} if(getCookie('mon_sects2')){var sect2 = getCookie('mon_sects2');}else{var sect2 = "科目2,教室,備考";} if(getCookie('mon_sects3')){var sect3 = getCookie('mon_sects3');}else{var sect3 = "科目3,教室,備考";} if(getCookie('mon_sects4')){var sect4 = getCookie('mon_sects4');}else{var sect4 = "科目4,教室,備考";} if(getCookie('mon_sects5')){var sect5 = getCookie('mon_sects5');}else{var sect5 = "科目5,教室,備考";} var sects = new Array(sect1,sect2,sect3,sect4,sect5); //時間割編集ここから function editj(a){ var secname = new Array('mon_sects1','mon_sects2','mon_sects3','mon_sects4','mon_sects5'); editsec = window.prompt("「科目,教室,備考」の順に入力してください", sects[a]); if(editsec){ secookie = secname[a]; setCookie(secookie,editsec,365); location.reload(); } } //時間割編集ここまで //時間割表示 for (i = 0; i < 5; i = i + 1){ j = i + 1; wari = sects[i].split( "," ); var subj = "sbj" + j; var clrm = "crm" + j; var comt = "com" + j; if(wari[0]){ document.getElementById(subj).innerHTML = wari[0]; } if(wari[1]){ document.getElementById(clrm).innerHTML = wari[1]; } document.getElementById(comt).innerHTML = wari[2] + "<br><img src='img/bledit.gif' width='50' height='20' onClick='editj(" + i + ")'>"; } これをlocalStorageで保存するにはどうすればできますか? もしもcookieを使ってもAndroidで保存できる方法があれば教えてください

  • HTML 複雑なテーブルの作成

    今、HTMLでテーブルを作成しています。 よろしくお願いします。 下記のHTMLでテーブルを作成し 番号「18」までは、うまくいきました。 つぎに「19」を作成しようとすると 「9」のセル(rowspan="5")が下に伸びて、「19」に重なります。 何か、解決の方法はありますでしょうか? CSSでborderやclassを使用していますが省略しています。 また、widthも使用していますが省略しています。 <table cellspacing="7"> <tr> <th colspan="2">1</th> <th>2</th> <th>3</th> <th>4</th> <th>5</th> <th>6</th>       </tr> <tr> <td>7</td> <td>8</td> <td rowpan="5">9</td> <td>10</td> <td>11</td> <td>12</td> <td>13</td> </tr> <tr> <td colspan="2">14</td> <td>15</td> <td>16</td> <td>17</td> <td>18</td> </tr> <tr> <td colspan="7">19</td> </tr> </table>

    • ベストアンサー
    • CSS
  • tableヘッダーの縦書き

    Bootstarapを利用しているのですが、Tableのヘッダー部を 縦書きにするにはどのようにすれば良いでしょうか? <h2>Bordered Table</h2> <div class="table-responsive"> <table class="table table-bordered table-hover"> <thead> <tr> <th>Page</th> <th>Visits</th> <th>% New Visits</th> <th>Revenue</th> </tr> </thead> <tbody> <tr> <td>/index.html</td> <td>1265</td> <td>32.3%</td> <td>$321.33</td> </tr> <tr> <td>/about.html</td> <td>261</td> <td>33.3%</td> <td>$234.12</td> </tr> <tr> <td>/sales.html</td> <td>665</td> <td>21.3%</td> <td>$16.34</td> </tr> <tr> <td>/blog.html</td> <td>9516</td> <td>89.3%</td> <td>$1644.43</td> </tr> <tr> <td>/404.html</td> <td>23</td> <td>34.3%</td> <td>$23.52</td> </tr> <tr> <td>/services.html</td> <td>421</td> <td>60.3%</td> <td>$724.32</td> </tr> <tr> <td>/blog/post.html</td> <td>1233</td> <td>93.2%</td> <td>$126.34</td> </tr> </tbody> </table> </div>

    • 締切済み
    • CSS
  • JavaScript パターン作成

    JavaScriptで添付画像のようなパターンを作ります。 ループ処理(for, forEach, e.t.c.)を用いずに作るには どのようなコードになりますか? <table id="table2"> <tbody> <tr> <th></th><th>A</th> <th>B</th><th>C</th><th>D</th><th>E</th><th>F</th> <th>G</th><th>H</th><th>I</th><th>J</th><th>K</th> </tr> <tr> <th>1</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>2</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>3</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>4</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>5</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>6</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>7</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>8</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>9</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>10</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> <tr> <th>11</th><td></td> <td></td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td></td> </tr> </tbody> </table>

専門家に質問してみよう