在操作DOM时无法使对象方法工作
Cannot get object methods work when manipulating DOM
我正在开发一款RPG游戏,作为一种爱好和学习语言的方式。现在在整理库存
我使用Jquery UI来构建模态对话框。当谈到库存时,我有2个主要对话框:一个显示角色细节,一个显示玩家访问城市的细节。这两个对话框都包含具有不同id但class = "bagpack"相同的div。我们的目标是通过在不使用div id的情况下按类别处理div并操纵它们来反映玩家背包中的当前物品(节省一些代码并增加更多灵活性)。
当涉及到库存项目时,我有对象构造器并通过.push(新剑)将元素推入相关的库存数组。每个项目都有一些方法,即单击,鼠标悬停,鼠标离开-这对于我面临的问题至关重要。
所以,当用户打开城市对话框或角色细节对话框时,gameConfig.inventory.draw('bagpack')会被调用,div .bagpack会根据bagpack数组中的对象重新绘制。DOM被相应地调整,但玩家显然只能在他正在查看的模式对话框中看到效果。
代码如下:
inventory: { //object within an object
market: [],
bagpack: [],
active: [],
arrows: [],
draw: function(inventoryArray, itemType){
$('.'+inventoryArray).empty();
gameConfig.inventory[inventoryArray].sort(function(a, b){ //sort array alphabetically
var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase()
if (nameA < nameB) //sort string ascending
return -1
if (nameA > nameB)
return 1
return 0 //default return value (no sorting)
});
if (itemType === undefined){ //array items will not be filtered
for(i=0; i<gameConfig.inventory[inventoryArray].length; i++) {
var item = gameConfig.inventory[inventoryArray][i];
item.div = $("<div/>");
item.div.addClass("inventoryItem");
item.div.css({"background-color": item.backgroundColor});
item.div.css({"background-image":"url('"+item.icon+"')"});
item.div.get(0).obj = item; //link DOM elemnt to an object
item.div.click(function(){
this.obj.clicked();
});
item.div.mouseover(function() {
this.obj.getInfo();
});
item.div.mouseout(function() {
this.obj.mouseLeft();
});
item.div.appendTo('.'+inventoryArray);
}
} else { //array items will be filtered
}
}
}
结果是:
- 我得到项目div(背景图像,颜色等)显示在两个模态对话框,没有问题围绕这个
- 现在,当涉及到方法时,我面临奇怪的行为。在一个模态对话框中,方法正在工作,而在另一个模态对话框中遇到以下错误:Uncaught TypeError: Cannot read property ' mouselleft ' of undefined
我不完全明白发生了什么,为什么在一种情况下,在数组中找到的对象处理得很好,而在另一种情况下,它们的方法丢失了。
多亏了Clayton Smith,问题才得以解决。
我做了一个蹩脚的方式存储在。obj,现在使用一个适当的方式。下面的代码解决了这个问题:
item.div.data('obj', item);
item.div.click(function(){
$(this).data('obj').clicked();
});
对象的方法现在可以在DOM
相关文章:
- 从 javascript 中的对象方法返回一个对象
- 在Javascript中调用对象方法时不是函数类型错误
- Java Script将对象方法映射到数组中的对象
- 将数据从promise then方法传递到对象方法
- 设置显示后Flash对象方法不可用:无
- 通过引用Javascript中的另一个函数来传递对象方法
- Javascript库对象方法声明
- JavaScript对象范围-在对象方法中使用对象变量
- jQuery:如何使用文字对象方法中的方法来获取全局变量
- Javascript 对象方法不更新变量
- setInterval 只在对象方法上运行一次
- 对象方法中函数中的上下文
- 用JavaScript编写对象方法的最佳方式是什么
- 使用回调处理程序调用函数内部的父对象方法
- 从Javascript中的对象方法中访问全局变量
- 将此(对象)传递到一个对象方法嵌套方法中
- 为什么我得到“;不是函数错误”;对于我的对象方法
- 带有回调的Javascript对象方法中的递归
- 更正Node.js异步管道中的对象方法调用
- 如何在对象方法上调用requestAnimFrame