2016-07-06 117 views
0

我具有交點功能通過輸入被饋送<form>的Javascript ::防止當頁面被加載

var chatArr = []; 

function input() { 
    var chat = document.getElementById("yousay").value; 
    chatArr.push(chat); 
    var words = chatArr.join(' ').match(/\S+/g); 
     if(chat.length == 0){ 
     console.log("Mithras hears you") 
     } 
     else if(words.length > 1){ 
     return words; 
     } 
     else{ 
     console.log(chat) 
     }; 
} 

然後未被捕獲的錯誤:

function setIntersection(a, b) { 

    var result = []; 

    for (var i = 0; i < a.length; i++) { 
     if (b.indexOf(a[i]) !== -1 && result.indexOf(a[i]) === -1) { 
      result.push(a[i]); 
     } 
    } 

    return result; 
} 

其中,在其轉,進入到該功能:

Song.prototype.lyricsIntersect = function(input) { 


    var bestSong = null; 
    var bestCount = -Infinity; 

    for (var i in songs) { 
     var currentCount = setIntersection(songs[i].lyrics, input()).length; 
(...) 

當頁面被加載時,表單顯然是空的,所以我得到:

Uncaught TypeError: Cannot read property 'indexOf' of undefined

如何防止這種錯誤加載頁面時?

+0

'函數input'必須返回一個數組的每一個值。 'b.indexOf'什麼? – PHPglue

+0

該計劃的目的是什麼? – PHPglue

回答

0

檢查數組的長度得到數組的索引之前,

if(result.length > 0) 
{ 
if (b.indexOf(a[i]) !== -1 && result.indexOf(a[i]) === -1) { 
      result.push(a[i]); 
     } 
} 
+0

請編輯更多信息。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。我們在這裏努力成爲知識的資源。 – abarisone

0

試圖聲明您的數組是這樣的:

var result = new Array(a.length); 
0

嘗試添加一些保護的if語句,就像這樣:

function setIntersection(a, b) { 

    var result = []; 

    for (var i = 0; i < a.length; i++) { 
     if (
      typeof b != "undefined" && /* added protection */ 
      b.indexOf(a[i]) !== -1 && result.indexOf(a[i]) === -1) { 
      result.push(a[i]); 
     } 
    } 

    return result; 
} 

現在,由於此代碼位於循環內部,因此如果b未定義,最好做的是避免任何迭代,因此th在:

function setIntersection(a, b) { 

    var result = []; 

    /* added protection */ 
    if(typeof b != "undefined") return result; 

    for (var i = 0; i < a.length; i++) { 
     if (b.indexOf(a[i]) !== -1 && result.indexOf(a[i]) === -1) { 
      result.push(a[i]); 
     } 
    } 

    return result; 
} 

基本上,你的函數的參數可能要考慮到,並添加保護如果有必要