首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从附加到div的对象中获取属性值?

如何从附加到div的对象中获取属性值?
EN

Stack Overflow用户
提问于 2015-06-26 00:02:15
回答 2查看 64关注 0票数 2

我正在Javascript/jQuery中构建一个面向对象的连接四个游戏,以完成任务。这个板是用一系列的“芯片”物体来建造的。我遍历数组,动态地为每个对象创建一个div,并将对象追加到div。每个div都有一个点击事件,所以当玩家点击一个‘正方形’时,事件就会被触发。当触发此事件时,我需要能够访问每个对象的属性值,但无法确定如何进行。我签出了-> this <-答案,但它对我不起作用,因为每个对象都没有要引用的名称,只有它所在的div,其中有两个类,取决于它的状态。我怎么才能得到它的价值呢?

下面是我的板对象的代码,它创建了芯片对象的数组,它是div,并附加它们:

代码语言:javascript
复制
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
                }
            }   
        }           

    };

下面是用于测试如何获取值的事件处理程序的版本--基于到目前为止所见过的解决方案:

代码语言:javascript
复制
$(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()函数中命名的对象时,如果我将芯片大写(因为它指的是我认为的芯片构造函数),就会发出警告,说'undefined‘。

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-26 00:09:00

chip是函数局部变量,因此它的范围被限制在makeChips函数中。如果您想跨函数使用它,那么可以定义退出函数的变量,或者在需要的地方将它的引用传递给其他函数。

票数 1
EN

Stack Overflow用户

发布于 2015-06-26 00:12:31

当你在这里定义chip时..。

代码语言:javascript
复制
        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);
            }
        }

..。它将只能在本地访问(在该功能体内)。为了使变量在处理程序中可访问,可以将其添加到board对象(或其他全局对象)中,如下所示:

代码语言:javascript
复制
        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 = [];
                board.chip = new Chip(); //make it a chip object, add it to a global object 
                board.chip.coordinates = [i,x]; //assign coordinates for testing win
                newRow.push(board.chip);//push chip object into new Board 
                this.newBoard.push(newRow);
            }
        }

然后,在底层的处理程序中,您应该能够像这样再次访问它:

代码语言:javascript
复制
        var targetData = $(target).data("obj", board.chip);

这至少应该解决您提到的undefined问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31062778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档