2017-04-24 8 views
3

私はJavaScriptを学習しており、結果を与える表を作成しようとしています。コンソールで、空白のフィールドで入力ボタンをクリックしたときに、JavaScriptでエラーが発生しました。

"demo.js:408 Uncaught TypeError: Cannot read property '-1' of undefined"

と間違って何:私はエラーを取得しています空白の入力欄に入力ボタンをクリックしてコンソールで

My fiddle

function showResult() { 
    var viewResult = document.getElementById('demo'); 
    var inputOne = document.getElementById("studentName").value; 
    var inputTwo = document.getElementById("studentsubj").value; 
    var stuName = studentName.indexOf(inputOne); 
    var subName = subjectName.indexOf(inputTwo); 
    var result = markes[stuName][subName]; 
    viewResult.innerHTML = "This is the marks of " + inputOne + " " + inputTwo + " " + result + " %"; 
} 

はjavascriptの

にこれは誤りであります私のコード。

+0

? – gurvinder372

+0

上記のコメントに加えて、明示的に配列 'markes'はあなたのアクセス方法では定義されていません。値が空であるかどうかをテストする必要があります。 –

+1

.indexOf()は値が見つからない場合は-1を返します。戻り値を配列のインデックスとして使用する前に、そのことをテストする必要があります。 – nnnnnn

答えて

0

入力フィールドが空白の場合、var stuName = studentName.indexOf(inputOne);var subName = subjectName.indexOf(inputTwo); は-1を返します。したがって、var result = markes[stuName][subName];var result = markes[-1][-1];になります。これはコンソールエラーの原因です。

1

生徒と科目が存在するかどうかを確認する必要があります。

var studentName = ["Bruce", "Clark", "Barry", "Diana", "Victor", "Billy"]; 
 
var subjectName = ["English", "Math", "History", "Geography", "Physics", "Biology"]; 
 
var markes = [ 
 
    [99, 98, 97, 98, 99, 90], 
 
    [98, 90, 96, 99, 98, 95], 
 
    [95, 98, 94, 90, 97, 91], 
 
    [99, 97, 94, 90, 96, 92], 
 
    [69, 89, 79, 59, 65, 90], 
 
    [50, 90, 91, 66, 70, 80] 
 
]; 
 
function showResult() { 
 

 
    var inputOne = document.getElementById("studentName").value; 
 
    var inputTwo = document.getElementById("studentsubj").value; 
 

 
    var stuName = studentName.indexOf(inputOne); 
 
    var subName = subjectName.indexOf(inputTwo); 
 

 
    if (stuName < 0) { 
 
     alert("Student not found"); 
 
     return; 
 
    } 
 
    if (subName < 0) { 
 
     alert("Subject not found"); 
 
     return; 
 
    } 
 
    var result = markes[stuName][subName]; 
 
    alert(result); 
 
    document.querySelector('input').value = ""; 
 
}
<table border="1" width="auto"> 
 
    <tr> 
 
     <td>Name</td> 
 
     <td>English</td> 
 
     <td>Math</td> 
 
     <td>History</td> 
 
     <td>Geography</td> 
 
     <td>Physics</td> 
 
     <td>Biology</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Bruce</td> 
 
     <td>99%</td> 
 
     <td>98%</td> 
 
     <td>97%</td> 
 
     <td>98%</td> 
 
     <td>99%</td> 
 
     <td>90%</td> 
 
    </tr> 
 

 
    <tr> 
 
     <td>Clark</td> 
 
     <td>98%</td> 
 
     <td>90%</td> 
 
     <td>96%</td> 
 
     <td>99%</td> 
 
     <td>98%</td> 
 
     <td>95%</td> 
 
    </tr> 
 

 
    <tr> 
 
     <td>Barry</td> 
 
     <td>95%</td> 
 
     <td>98%</td> 
 
     <td>94%</td> 
 
     <td>90%</td> 
 
     <td>97%</td> 
 
     <td>91%</td> 
 
    </tr> 
 

 
    <tr> 
 
     <td>Diana</td> 
 
     <td>99%</td> 
 
     <td>97%</td> 
 
     <td>94%</td> 
 
     <td>90%</td> 
 
     <td>96%</td> 
 
     <td>92%</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Victor</td> 
 
     <td>69%</td> 
 
     <td>89%</td> 
 
     <td>79%</td> 
 
     <td>59%</td> 
 
     <td>65%</td> 
 
     <td>90%</td> 
 

 
    </tr> 
 
    <tr> 
 
     <td>Billy</td> 
 
     <td>50%</td> 
 
     <td>90%</td> 
 
     <td>91%</td> 
 
     <td>66%</td> 
 
     <td>70%</td> 
 
     <td>80%</td> 
 
    </tr> 
 
</table> 
 
<br> 
 
<br> 
 
<form> 
 
    <input type="text" id="studentName"> 
 
    <input type="text" id="studentsubj"> 
 
    <input type="button" name="submit" value="submit" onclick="showResult()" /> 
 
</form> 
 
<p id=demo></p>

あなたがそれらの入力ボックスに入力されたどのような値と同じコードHERE, Update for your link

関連する問題