我想聲明一個onclick
方法,該方法將調用一個函數,該函數清除並重新構建顯示單擊項目的更多細節的顯示。問題是我試圖分配的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});
}
另一種選擇是在onclick中聲明匿名函數:'i.node.onclick = function(){detailView(items [cnt]); }' – 2011-05-24 14:30:43
@Platinum Azure在這種情況下不起作用,因爲賦值是在循環中完成的! – Pointy 2011-05-24 14:42:29
啊,我認爲這個任務是針對不同的節點。我對拉斐爾一無所知,所以我可能是錯的。 :-((這就是說,它看起來很可疑,就像它們是等價的,因爲你的函數返回我的匿名函數......) – 2011-05-24 14:49:46