2014-09-04 30 views
1

我是新來的Javascript/jquery,並與我正在開發的應用程序有問題。嘗試讀取對象的屬性時遇到Uncaught TypeError。我的最終目標是讓用戶在文本框中輸入內容並根據該輸入將輸入作爲名稱屬性創建一個對象。這是我到目前爲止的代碼:未捕獲的類型錯誤無法讀取undefined的屬性「名稱」

$(document).ready(function(){ 
    var playerArray = []; 
    var playerIndex = 0; 

    function player (name) { 
     this.name = name; 
     score = 0; 
    }; 

    var addPlayer = function(name){ 
     playerArray[playerIndex] = new player(name); 
     playerIndex++; 
    }; 

    $('#add_players').on('click', '#btn-add', function(){ 
     var toAdd = $('input[name=playerNameInput]').val(); 
     addPlayer(toAdd); 
     $('#playerList').append('<div class="ui-block-a" style="padding:1em">' + playerArray[playerIndex].name + '</div>'); 
    }); 
}); 

...我已經尋找這樣的其他問題的網站,但他們都處理的API或無關的問題我的。我將不勝感激任何幫助。

回答

1

addPlayer()是增加你的playerIndex計數器後,你已經添加了對象playerArray,你那麼你click處理程序中使用。目前尚不清楚,根據你的代碼,你想要什麼,當你撥打playerArray[playerIndex](最後一個元素添加?),但我只想擺脫櫃檯和使用Array.prototype.push(),而不是檢索:在

$(document).ready(function(){ 
    var playerArray = []; 

    function player (name) { 
     this.name = name; 
     score = 0; 
    } 

    var addPlayer = function(name){ 
     playerArray.push(new player(name)); 
    }; 

    $('#add_players').on('click', '#btn-add', function(){ 
     var toAdd = $('input[name=playerNameInput]').val(); 
     addPlayer(toAdd); 

     // playerArray[playerArray.length - 1] will always retrieve the last element in the array 
     // use playerArray[0] if you always want the first 
     $('#playerList').append('<div class="ui-block-a" style="padding:1em">' + playerArray[playerArray.length - 1].name + '</div>'); 
    }); 
}); 
+2

而你剛剛從陣列中移除了播放器。在讀取值時,pop()不是正確的選擇。推送很好。 – epascarello 2014-09-04 16:13:53

+0

好的。更新。 – 2014-09-04 16:14:53

1

看看這段代碼

var addPlayer = function(name){ 
    playerArray[playerIndex] = new player(name); //you store it at an index 
    playerIndex++; //you increment 
}; 

由於指數遞增,有沒有像你正在閱讀的位置。

console.log(playerArray[playerIndex]); //undefined 
console.log(playerArray[playerIndex-1]); //the last entry you added 

我個人不依賴於最後一個索引。當你創建它時,我會返回新玩家。比沒有必要處理索引問題。

var playerArray = []; 
var playerIndex = 0; 

function Player (name) { 
    this.name = name; 
    score = 0; //this will be a problem.... 
}; 
var addPlayer = function(name){ 
    var user = new Player(name); 
    playerArray.push(user); 
    return user; 
}; 

$('#add_players').on('click', '#btn-add', function(){ 
    var toAdd = $('input[name=playerNameInput]').val(); 
    var person = addPlayer(toAdd); 
    $('#playerList').append('<div class="ui-block-a" style="padding:1em">' + person.name + '</div>'); 
}); 

另外score將會是一個問題。

+0

感謝downvote一個正確的答案。 – epascarello 2014-09-04 16:10:21

+0

你能幫我理解爲什麼有人會低估我們的答案嗎?你一直在做這個比我還要長。我們同時發佈了(正確的)答案。 downvotes混淆了我。無論如何,我高舉你的意見來彌補你錯誤的倒退。 – Antiga 2014-09-04 16:12:00

+0

因爲人們這樣做。 lol – epascarello 2014-09-04 16:13:33

1

你第一次運行時加1,你在0

初始化到時候你到playerArray[playerIndex].name首次時間playerIndexplayerIndex爲1,您正在尋找的第一個值(指數0) 。你永遠只是一個索引。

相關問題