私は、今時刻表検索サイトを作っています。
htmlにある表(下に記述)から時刻を取得して(>=現在時刻)となる行を取得するプログラムを書いています
時刻 | 種別 | 行先 |
---|---|---|
18:49 | 普通 | 〇〇 |
18:52 | 快速 | 〇〇 |
19:02 | 普通 | 〇〇 |
18:53~18:59の間に指定するとエラーが発生します。
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>時刻表検索サイト</title> <script type="text/javascript"> var now; var nhour; var nmin; var scel; window.onload = serch; function serch(a){ now = new Date(); nhour= now.getHours(); if(now.getMinutes() < 10){ nmin = "0" + now.getMinutes(); }else{ nmin= now.getMinutes();} var nyou = now.getDay(); if(a==1){ nhour=window.prompt("時を入力してください。(例:8, 17)"); nmin=window.prompt("分を入力してください。(例:04, 37)"); if(nhour=="" || nmin==""){ serch(1); } } var rowu; var rowa; var elements = document.getElementsByClassName('date'); for(i=0;i<elements.length;i++){ elements[i].innerHTML = "平日 Weekdays"; elements[i].style.backgroundColor = '#ffffff'; elements[i].style.color = '#000000'; } if( nhour ==23 && nmin>47 ){ var row = 215; }else if( nhour ==0 && nmin<=2 ){ var row = 215; }else if(nhour < 5){ var row = 0; }else{ for(var row=0; row<=1000; row++){ time1 = weekJRAk.rows[row].cells[0].innerHTML; time = time1.split(':'); if( nhour == time[0]){ if( nmin <= time[1]){ break;} }else if(nhour + 1 == time[0]){ if( nmin >= 0){ break;} }}}; var Aksenpatsu =(weekJRAk.rows[row].cells[0].innerHTML); var Akjihatsu =(weekJRAk.rows[row + 1].cells[0].innerHTML); var Akjijihatsu =(weekJRAk.rows[row + 2].cells[0].innerHTML); var Akyonhatsu =(weekJRAk.rows[row + 3].cells[0].innerHTML); var Akgohatsu =(weekJRAk.rows[row + 4].cells[0].innerHTML); var Aksenpatsusort =(weekJRAk.rows[row].cells[1].innerHTML); var Akjihatsusort =(weekJRAk.rows[row + 1].cells[1].innerHTML); var Akjijihatsusort=(weekJRAk.rows[row + 2].cells[1].innerHTML); var Akyonhatsusort=(weekJRAk.rows[row + 3].cells[1].innerHTML); var Akgohatsusort=(weekJRAk.rows[row + 4].cells[1].innerHTML); var Aksenpatsufor =(weekJRAk.rows[row].cells[2].innerHTML); var Akjihatsufor =(weekJRAk.rows[row + 1].cells[2].innerHTML); var Akjijihatsufor=(weekJRAk.rows[row + 2].cells[2].innerHTML); var Akyonhatsufor=(weekJRAk.rows[row + 3].cells[2].innerHTML); var Akgohatsufor=(weekJRAk.rows[row + 4].cells[2].innerHTML); var Aksenpatsustop =(weekJRAk.rows[row].cells[3].innerHTML); var Akjihatsustop =(weekJRAk.rows[row + 1].cells[3].innerHTML); var Akjijihatsustop=(weekJRAk.rows[row + 2].cells[3].innerHTML); var Akyonhatsustop=(weekJRAk.rows[row + 3].cells[3].innerHTML); var Akgohatsustop=(weekJRAk.rows[row + 4].cells[3].innerHTML); topt.innerHTML= "検索時刻 "+nhour+":"+nmin; var s, d; var sa, da; for(var i=0; i<5; i++){ if(i==0){ sa=Aksenpatsusort; da=Aksenpatsufor; }else if(i==1){ sa=Akjihatsusort; da=Akjihatsufor; }else if(i==2){ sa=Akjijihatsusort; da=Akjijihatsufor; }else if(i==3){ sa=Akyonhatsusort; da=Akyonhatsufor; }else if(i==4){ sa=Akgohatsusort; da=Akgohatsufor; } s=sa; d=da; if(i==0){ var JAk1s=document.getElementById('JAk1s'); JAk1s.innerHTML=s; var JAk1d=document.getElementById('JAk1d'); JAk1d.innerHTML=d; }else if(i==1){ var JAk2s=document.getElementById('JAk2s'); JAk2s.innerHTML=s; var JAk2d=document.getElementById('JAk2d'); JAk2d.innerHTML=d; }else if(i==2){ var JAk3s=document.getElementById('JAk3s'); JAk3s.innerHTML=s; var JAk3d=document.getElementById('JAk3d'); JAk3d.innerHTML=d; }else if(i==3){ var JAk4s=document.getElementById('JAk4s'); JAk4s.innerHTML=s; var JAk4d=document.getElementById('JAk4d'); JAk4d.innerHTML=d; }else if(i==4){ var JAk5s=document.getElementById('JAk5s'); JAk5s.innerHTML=s; var JAk5d=document.getElementById('JAk5d'); JAk5d.innerHTML=d; }; }; var JAk1t=document.getElementById('JAk1t'); var JAk2t=document.getElementById('JAk2t'); var JAk3t=document.getElementById('JAk3t'); var JAk4t=document.getElementById('JAk4t'); var JAk5t=document.getElementById('JAk5t'); JAk1t.innerHTML=Aksenpatsu; JAk2t.innerHTML=Akjihatsu; JAk3t.innerHTML=Akjijihatsu; JAk4t.innerHTML=Akyonhatsu; JAk5t.innerHTML=Akgohatsu; var JAk1r=document.getElementById('JAk1r'); var JAk2r=document.getElementById('JAk2r'); var JAk3r=document.getElementById('JAk3r'); var JAk4r=document.getElementById('JAk4r'); var JAk5r=document.getElementById('JAk5r'); JAk1r.innerHTML=Aksenpatsustop; JAk2r.innerHTML=Akjihatsustop; JAk3r.innerHTML=Akjijihatsustop; JAk4r.innerHTML=Akyonhatsustop; JAk5r.innerHTML=Akgohatsustop; }; </script> <style> body{ font-family:BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Helvetica Neue,Helvetica,Arial,sans-serif; background-color:#000000; color: #ffffff; min-width:1220px; width: auto;} #news{color:white; border-bottom: solid 5px #00bfff; font-style:italic;} h4#shi{border-bottom: solid 5px #00bfff; border-left: solid 5px #00bfff; padding: 10px} #news_info{color:#fff0b0; border-bottom: solid 5px #fff0b0; font-style:italic; margin-bottom: 5px;} h4#status{border-bottom: solid 5px #fff0b0; border-left: solid 5px #fff0b0; padding: 10px; margin-top: 5px;} h1#title{color:#00bfff;} table.display{text-align:center;} select#youbi{height:30px;} h4{color:white;} .date{ width:100%; height:auto; font-size: 25px; padding:0px; vertical-align:middle; } details summary::-webkit-details-marker { display: none; } table{color:white; border-collapse: collapse; text-align:center;} .jat{ font-size:35px; text-align:center; } .ent{ font-size:24px; text-align:center; } .title{ text-align:center; } .dtime{ font-size:60px; font-weight: 500; margin:0px; color:#ffff0b; width:150px; text-align:center; transform : scale(1, 1.5); } table td, th{ border-color: #302833; border-style: solid; border-width: 4px 0px; padding: 0.3em; } .stops{ font-size: 22px; text-align: left; vertical-align: top; } .sl{ display: inline-block; } .sl2{ width:125%; transform-origin: top left; transform : scaleX(0.8); } </style> </head> <body> <h1 id="title">時刻表検索サイト<br>Search Timetable</h1> <h3 id="news_info">運行情報 Train Status information</h3> <h4 id="status"> <br> </h4> <input type="button" value="時刻を変えて再検索" onclick="serch(1)"/> <h1><div id="topt">検索時刻 </div></h1> <br><div class="date"></div><br> <details open> <summary><img src="JRAk.jpg" alt="JR京都線 山科駅 [1][2]京都・大阪 方面" height="90px"></summary> <table id="JAk" class="details-content"> <tr> <td class="title"><span class="jat"><b>発順</b></span><br><span class="ent">Order</span></td> <td class="title"><span class="jat"><b>発車時刻</b></span><br><span class="ent">Dep. Time</span></td> <td class="title"><span class="jat"><b>種 別</b></span><br><span class="ent">Type</span></td> <td class="title"><span class="jat"><b>行 先</b></span><br><span class="ent">Destination</span></td> <td class="title"><span class="jat"><b>停車駅</b></span><br><span class="ent">Stops</span></td> </tr> <tr> <td><img src="2_1st.jpeg" alt="1st" height="80px"></td> <td><div class="dtime" id="JAk1t"></div></td> <td><div id="JAk1s"></div></td> <td><div id="JAk1d"></div></td> <td><div class="stops sl2" id="JAk1r"></div></td> </tr> <tr> <td><img src="2_2nd.jpeg" alt="2nd" height="80px"></td> <td><div class="dtime" id="JAk2t"></div></td> <td><div id="JAk2s"><span class="jat"></span></div></td> <td><div id="JAk2d"></div></td> <td><div class="stops sl2" id="JAk2r"></div></td> </tr> <tr> <td><img src="2_3rd.jpeg" alt="3rd" height="80px"></td> <td><div class="dtime" id="JAk3t"></div></td> <td><div id="JAk3s"></div></td> <td><div id="JAk3d"></div></td> <td><div class="stops sl2" id="JAk3r"></div></td> </tr> <tr> <td><img src="2_4th.jpeg" alt="4th" height="80px"></td> <td><div class="dtime" id="JAk4t"></div></td> <td><div id="JAk4s"></div></td> <td><div id="JAk4d"></div></td> <td><div class="stops sl2" id="JAk4r"></div></td> </tr> <tr> <td><img src="2_5th.jpeg" alt="5th" height="80px"></div></td> <td class="dep"><div class="dtime" id="JAk5t"></div></td> <td><div id="JAk5s"></div></td> <td><div id="JAk5d"></div></td> <td><div class="stops sl2" id="JAk5r"></div></td> </tr> </table> </details> <br><div class="date"></div><br> <h3 id="news">お知らせ information</h3> <h4 id="shi"> </h4> ▼データーベース <details> <summary>JR京都線 山科駅 [1][2]京都・大阪 方面 平日</summary> <table id="weekJRAk"> <tr> <td>18:42</td> <td>普通</td> <td>京都</td> <td>各駅</td> </tr> <tr> <td>18:46</td> <td>快速</td> <td>網干</td> <td>各駅</td> </tr> <tr> <td>18:52</td> <td>新快速</td> <td>網干</td> <td>各駅</td> </tr> <tr> <td>19:01</td> <td>快速</td> <td>網干</td> <td>各駅</td> </tr> <tr> <td>19:07</td> <td>新快速</td> <td>播州赤穂</td> <td>各駅</td> </tr> <tr> <td>23:34</td> <td>普通</td> <td>京都</td> <td>各駅</td> </tr> <tr> <td>23:45</td> <td>普通</td> <td>京都</td> <td>各駅</td> </tr> <tr> <td>23:51</td> <td>普通</td> <td>京都</td> <td>各駅</td> </tr> <tr> <td>0:08</td> <td>普通</td> <td>最終京都</td> <td>各駅</td> </tr> </table> </details> </body> </html>
nhourには18, 19などの時、nminには45, 53などの分が入っています。
weekJRAkは表のidです
↓エラー文
TypeError: undefined is not an object (evaluating 'weekJRAk.rows[row].cells')
time = の行にエラーが出ています
他の時分ならできるがその時間の最後を過ぎる(上の表で言う18:53以降)とエラーになってしまいます。
たくさんの、ご回答よろしくお願いします。
すべて試します。
文字数の関係で同じパターンのところを削除しました。
window.onloadでは作動しますが「時刻を変えて再検索」から時刻を入力して実行するとエラーになります。
まだ回答がついていません
会員登録して回答してみよう