2012-10-10 22 views
0

我尝试在应该在点击事件上显示的画布上显示一些图像。一切似乎都没问题,但我发现了一些错误,我无法修复很长时间。问题是,第一张页面开启的灯图不显示。它可以通过以下步骤来再现:在浏览器图像添加到画布的奇怪行为

  1. 打开link;
  2. 点击即可图片< - 将显示清晰的矩形
  3. 再次点击。 < - 矩形将消失
  4. 再次点击。 < - 将显示带矩形的图像

为什么图像不能第一次显示?

回答

2

至少在代码中有一个(很常见)的错误。方法.onload预计分配一个函数引用。您将其分配给立即函数调用processButtonImages(i, delta, buttons[i], object)的结果(返回值)。所以只要你没有从这个函数调用返回函数引用(你不这样做),这将不会按预期工作。

+0

嗯,其实我没有听清意思。那么,我应该写什么来返回引用? 它应该是这样的:'processButtonImages;''processButtonImages'函数结束时'返回processButtonImages;' – rdo

+0

实际上,您现在不需要重新考虑您的语义。通常你可以这样做''按钮[i] .onload = function(){processButtonImages(i,delta,buttons [i],object)};'但是当你在循环中分配它时,它仍然会遭受同步问题由于关闭)。您需要“松开”循环或创建另一个(内部)闭包来处理循环索引 – devnull69

+0

是的,问题出在这部分代码中。经过一些额外的调试后,我解决了它。谢谢! – rdo

0

您正在调用并设置图像onload事件。所以,起初它不能正确执行整个事情。检查这个jsfiddle。我在末尾编辑了代码,http://jsfiddle.net/sKymY/14/