2 zhengyx19921007yeah zhengyx19921007yeah 于 2014.11.26 12:57 提问

JS 为什么调试单步运行成功而直接运行失败?并且加了个alert后就能直接运行成功

RT 有2个在同一页面的js文件,我是在一个js文件的for循环内逐个调用另一个js 文件的画布数组,然后在for内用drawImage把图画出来,但是程序运行失败,错误是没得到画布。可是如果用调试在获取画布的语句前设断点再单步运行的话能够成功,或者是在获取画布的语句前设个alert之后直接运行就能成功,求问为什么啊!!

2个回答

chenssy
chenssy   Rxr 2014.11.26 13:58

这是延时问题!你需要加一个setTimeout方法即可解决问题!

chenssy
chenssy 回复zhengyx19921007yeah: 把你的程序贴出来看看!
3 年多之前 回复
zhengyx19921007yeah
zhengyx19921007yeah 我试过了,但是在for里面用的话,for全部循环完了才能执行延时的程序,那么我只能获得数组里面的最后一个画布了
3 年多之前 回复
showbo
showbo   Ds   Rxr 2014.11.26 13:46

应该是你图片没有加载完毕,导致drawImage没有绘制成功。。图片加载是要时间的,你的alert或者断点雕饰都会让图片的加载争取到了时间。。给img增加onload事件,在onload事件中执行drawImage操作

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
解决js代码中加入alert()就成功执行,不加就不对的问题!
转众多网友意见 问题:          我是做一个回车事件处理,翻页的那种,在一个页面上成功了,换到另外两个页面上就出错了。反正就是跳到1,如果加上alert(),就跳转成功。 可能情况:          这种情况一般出现在 alert() 之后的某个代码需要页面元素进入一定的状态才能使用,加上 alert() 之后,相当于页面元素有足够的时间进入一定的状态了,如果确定
为什么Excel VBA逐步调试通过可整体运行却不稳定?
今天在编写VBA程序时遇到一个很有趣的Bug,程序的功能是要读取一个Excel文件中的每一行内容,并把这一行内容按照一定的规则生成为目标Excel文件的新的Sheet,调试时发现一个很有意思的问题,单步调试没有问题,但是一旦整体运行就出错,调试了半天,我定位到了一段可疑区域: 这是改过以后的,原来,错误原因在于我直接用的是Cells(Pointer + 1, 13),而没有使用DataShe
程序直接运行和用gdb单步执行结果不同
前段时间调试代码时发现  程序直接运行的结果怎么都不正确,  但使用gdb单步执行时结果却总是正确的。 最开始以为使用gdb单步执行与程序直接运行的区别无非就是对多线程的影响,可查来查去没有发现线程安全问题。 后来仔细梳理了现象并啃了一遍代码后才发现,gdb单步执行也会对网络io产生影响。 我当时的现象就是: 直接运行时,读到的HTTP响应总是只有head没有body;
VS2010调试运行正常,直接exe运行错误问题
代码里加载数据路径为相对路径,调试运行没问题,直接运行exe,无法找到数据文件,所以报错。更改成绝对路径后或者将数据文件放到exe所在路径下,exe直接运行正常。
解决js赋值时需要添加alert方法赋值才成功否则赋值语句不执行问题
最近在调整页面栏位赋值问题,在赋值语句之前存在ajax方法,在ajax方法中对赋值栏位有进行操作,ajax方法调用完毕后,栏位的赋值语句并不执行,添加alert语句后,赋值语句就执行了,搜寻网上的解决方法,如果是嵌入页面的脚本,有的是将该方法的放置到页面的标签之前, 加 defer 属性,即:...但试过后均无效果,然后找的的合理解释是,之所以弹出alert赋值语句会执行,alert语句起到了延时
stm32单步调试正确,全速运行错误
模拟i2c的时候出现的问题。 单步走延时较大(全速跑只有程序设置的时延),导致程序全速运行无输出。 加大时延即可。
编译器运行程序和直接双击运行程序一个成功一个失败的问题说明
不管是在MFC还是在QT程序编译时,当我们在编译器中调试或运行程序时,程序如果加载某个语言文件或者某个配置文件的路径我们明明写的是和程序在同一路径下,但是我们运行或调试居然报错加载不成功,而当我们进入目录去直接双击运行程序,却发现又是对的,这是为什么呢?我们程序编译有错吗? 举例子描述上述问题: 比如我们现在要加载一个xml文件,在程序中我们写的路径如下: w.ReadFile("books
开始执行不调试和直接点击exe的区别?
这两个到底有啥区别啊。。。。加载皮肤后,点击开始执行不调试(CTRL+F5)就有效果,点击exe就没有皮肤效果,。。。咋回事啊???管理员身份运行也不行。
使用Ajax之后要alert才能执行的解决方案
因为ajax默认是异步执行的,也就是并没有等待请求完毕就开始执行下一行js语句了,导致赋值为null。 解决方案: 加上如下代码: $.ajax({ async:false, //******其他代码 }); 即可解决。
js函数必须在alert执行才能执行
多数原因为界面ajax中动态添加的元素还没被添加上,就执行了js函数(js函数要调用动态元素),解决办法:ajax方法中添加 async:false,同步,作用为,在ajax执行完毕后才执行之后的js。