onclick方法在我声明它时被执行
The onclick method gets executed when I am declaring it
我正试图声明一个onclick
方法,该方法将调用一个函数,该函数将清除并重建显示被单击项目的更多详细信息的显示。问题是,我试图分配的onclick
方法在分配时会被执行,所以我看到的只是其中一个项目的详细视图。
如果你删除i.node.onclick
行,你会看到5个随机放置的项目,你可以悬停在上面,但不能点击。
HTML
<html>
<head>
<title>Raphael Play</title>
<script type="text/javascript" src="Raphael.js"></script>
<script type="text/javascript" src="Test.js"></script>
<style type="text/css">
#map
{
width: 500px;
border: 1px solid #aaa;
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>
JavaScript
var map;
var items = new Array();
window.onload = function()
{
map = new Raphael(document.getElementById('map'), 500, 500);
for(cnt = 0; cnt < 5; cnt++)
{
var x = 5 + Math.floor(Math.random() * 490);
var y = 5 + Math.floor(Math.random() * 490);
items[cnt] = new Item(x, y);
var i = map.circle(items[cnt].x, items[cnt].y, 8).attr({fill: "#000", stroke: "#f00", title: items[cnt].name});
i.node.onclick = detailView(items[cnt]);
}
}
function Item(x, y)
{
this.x = x;
this.y = y;
this.name = "Item[" + x + "," + y + "]";
}
function detailView(dv)
{
map.clear();
map.circle(250, 250, 25).attr({fill: "#0f0", stroke: "#f00", title: dv.name});
}
首先需要一个辅助函数:
function detailViewer(item) {
return function() { detailView(item); };
}
然后你可以像这样设置点击处理程序:
i.node.onclick = detailViewer(items[cnt]);
helper函数为您构建了一个函数,当它被调用时,它将调用您的"detailView()"函数,传递与节点相关的项。正如您所注意到的,您的代码在执行初始化时被简单地调用了"detailView()"。"onclick"属性需要是一个函数本身,这就是我上面提出的helper函数将为您提供的。
您需要将i.node.onclick
设置为一个函数。您将其设置为detailView(items[cnt])
,运行该函数,然后将i.node.onclick
设置为返回值(即undefined
)。
您需要让detailView
返回一个函数。
function detailView(dv){
return function(){
map.clear();
map.circle(250, 250, 25).attr({fill: "#0f0", stroke: "#f00", title: dv.name});
};
}
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Dojo不解析自定义小部件的模板html中的小部件声明性
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- addEventListener函数是在声明listener时执行的
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 我可以信任 JavaScript 中声明中的执行顺序吗?
- 在声明命名函数后执行该函数
- 两个捕获的承诺/块声明都没有执行
- 出于性能原因,我是否应该避免多次执行相同的函数声明
- 如果在上层作用域中声明变量,则变量在局部作用域中是未定义的,并且在未执行的语句中在局部作用域中声明同名的变量
- 每当我尝试将一些修改后的值赋给脚本标记内的全局声明变量时,脚本标记就会停止执行.为什么
- 回调函数内部声明的变量是否保留在内存中,还是在回调执行结束时销毁?
- 当声明了重复的命名函数时,Javascript如何执行代码
- 如何在JavaScript中使用setTimeout()执行已经声明的函数
- 声明多个具有多个if's的var's,但是执行任何if's,而不是one、all或none.[H
- JavaScript匿名函数立即调用/执行(表达式与声明)
- 执行上下文两次声明名称
- 执行顺序-头与体中的Javascript变量声明
- onclick方法在我声明它时被执行