【发布时间】:2015-06-26 00:02:15
【问题描述】:
我正在用 Javascript/jQuery 构建一个面向对象的连接四游戏,以完成一项任务。该板是使用一组“芯片”对象构建的。我遍历数组并为每个对象动态创建一个 div 并将该对象附加到该 div。每个 div 上都有一个点击事件,因此当玩家点击一个“正方形”时,就会触发该事件。触发此事件时,我需要能够访问每个对象的属性值,但不知道该怎么做。我检查了 -> this
这是我的板对象中创建芯片对象数组的代码,它是 div,并附加它们:
var gameBoard = [
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6]
];
var board = {
coordinates: [],
newBoard: [],
owner: null,
makeChips: function(){
for(var i = 0; i < gameBoard.length; i++){ //iterate array
var row = gameBoard[i];
for(var x = 0; x < gameBoard[i].length; x++){ //iterate subarrys
var newRow = [];
var chip = new Chip(); //make it a chip object
chip.coordinates = [i,x]; //assign coordinates for testing win
newRow.push(chip);//push chip object into new Board
this.newBoard.push(newRow);
}
}
},
makeBoard: function(){
var makeBoard = $("#board"); //grab the board div from the DOM
for(var i = 0; i < this.newBoard.length; i++){
var row = this.newBoard[i];
for(var x = 0; x < row.length; x++){
var makeDiv = $("<div>").attr("class", "chip empty"); //make a new div for each chip object
makeDiv.append(row[x]); //attach the chip object to a specific div //<---- ?? am i appending the actual object ??
makeBoard.append(makeDiv); //append div to board
}
}
}
};
这是我用来测试如何获取值的事件处理程序的版本 - 基于我迄今为止在 SO 上看到的解决方案:
$(function(){
var start = $("#start");
var gameBoardDiv = $("#board"); //grab all board divs
board.makeChips();
board.makeBoard();
gameBoardDiv.on("click", ".chip",function(event){
var target = $(event.target); //returns the div clicked
var targetData = $(target).data("obj", chip);
alert(targetData.data("obj").coordinates);
}); // chips event listener
});
当我引用在 makeChips() 函数中命名的对象时,我在控制台中得到的是一条“芯片未定义”消息,并且如果我将芯片大写,则警告说“未定义”(因为它是指的是我认为的芯片构造函数)。
感谢任何帮助!
【问题讨论】:
标签: javascript jquery html