Javascript 未捕获的TypeError无法读取属性';名称';未定义的
我是Javascript/jquery新手,在开发一个应用程序时遇到了问题。在尝试读取对象的属性时,我遇到了一个未捕获的类型错误。我的最终目标是让用户在文本框中输入一些内容,并基于该输入创建一个对象,将该输入作为名称属性。以下是我目前的代码:Javascript 未捕获的TypeError无法读取属性';名称';未定义的,javascript,jquery,object,Javascript,Jquery,Object,我是Javascript/jquery新手,在开发一个应用程序时遇到了问题。在尝试读取对象的属性时,我遇到了一个未捕获的类型错误。我的最终目标是让用户在文本框中输入一些内容,并基于该输入创建一个对象,将该输入作为名称属性。以下是我目前的代码: $(document).ready(function(){ var playerArray = []; var playerIndex = 0; function player (name) { this.name
$(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>');
});
});
$(文档).ready(函数(){
var playerArray=[];
var playerIndex=0;
函数播放器(名称){
this.name=名称;
得分=0;
};
var addPlayer=函数(名称){
playerArray[playerIndex]=新玩家(姓名);
playerIndex++;
};
$('add#u players')。在('click','btn add',函数()上{
var toAdd=$('input[name=playerNameInput]')。val();
addPlayer(toAdd);
$('#playerList').append(''+playerray[playerIndex].name+'');
});
});
我在网站上搜索过其他类似的问题,但它们都是关于API或与我无关的问题。我将非常感谢任何帮助 看看这个代码
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>');
});
var playerray=[];
var playerIndex=0;
函数播放器(名称){
this.name=名称;
score=0;//这将是一个问题。。。。
};
var addPlayer=函数(名称){
var user=新玩家(名称);
playerary.push(用户);
返回用户;
};
$('add#u players')。在('click','btn add',函数()上{
var toAdd=$('input[name=playerNameInput]')。val();
var person=addPlayer(toAdd);
$(“#playerList”).append(“”+person.name+“”);
});
另外,
score
也将是一个问题 第一次运行是将1添加到初始化为0的playerIndex
当您第一次到达playerArray[playerIndex].name
时,playerIndex
为1,您正在查找第一个值(索引0)。您将始终落后一个索引。addPlayer()
在将对象添加到playerArray
后,将增加playerIndex
计数器,然后在单击处理程序中使用该计数器。根据您的代码,当您调用playerArray[playerIndex]
(添加的最后一个元素?)时,不清楚您试图检索什么,但我只想去掉计数器并使用:
$(文档).ready(函数(){
var playerArray=[];
函数播放器(名称){
this.name=名称;
得分=0;
}
var addPlayer=函数(名称){
playerary.push(新玩家(名称));
};
$('add#u players')。在('click','btn add',函数()上{
var toAdd=$('input[name=playerNameInput]')。val();
addPlayer(toAdd);
//playerArray[playerArray.length-1]将始终检索数组中的最后一个元素
//如果始终需要第一个,请使用playerArray[0]
$(“#playerList”).append(“”+playerray[playerray.length-1].name+“”);
});
});
你能帮我理解为什么有人会否决我们的答案吗?你做这件事的时间比我长。我们俩同时发布了(正确的)答案。那些反对票把我弄糊涂了。在任何情况下,我都会将你的投票提高,以补偿你错误的否决票。鉴于他/她在JS方面的经验水平,OP可能会从解释“score
将成为一个问题”中获益。我感谢你的回答。这很有帮助。我想知道为什么你认为score
会成为一个问题,因为它是一个随机的全局变量,没有附加任何东西。我认为它属于玩家对象的范围。你刚刚从数组中删除了玩家。读取值时,pop()不是正确的用法。推就可以了。
$(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>');
});
});