2 judas jia judas_jia 于 2016.09.10 23:05 提问

js实际写代码的时候发现经常出现某语句执行不出来结果,但在其后加alert()这句话就可以执行出来

对于这个问题,我每次就把这句出不来的语句写到定时器里面就好了,比如下面

图片说明
点击更多操作弹出菜单列表,开始的时候默认是display:none;

    $("#showOperate").css("display","block");//设置菜单为block
        // alert(2);
        在火狐里面是没有问题的,但是再chrome里就弹不出来菜单,测试的时候发现给后面随便加一句alert()就能出来,当然加alert是不可能这样解决的,所以最后我设置了定时器如下:
        setTimeout(function(){$("#showOperate").css("display","block")}, 1);

这样写就chrome也正常了,定时器只有1毫秒,
求大神解答

3个回答

qq_29594393
qq_29594393   Ds   Rxr 2016.09.10 23:17

加载的顺序,你把要执行的js都放在
$(function(){

})
里面就没有问题了,原因是js执行的时候还没有加载下面的html ,找不到对象,自然无法执行

qq_29594393
qq_29594393 回复judas_jia: alert()阻塞js的加载,但是不阻塞html的加载
大约一年之前 回复
judas_jia
judas_jia 回复当作看不见: 我说的最后一句“为啥我那样改就可以出来了”不是问你你说的方法,我说的是为啥我把语句放进1毫秒的定时器里面就出来了,不是说写到ready里就出来了,我本来就是那样写的
大约一年之前 回复
qq_29594393
qq_29594393 回复judas_jia: 说了是加载顺序的原因,由于js是解释型的语言,加载一句执行一句,加载js的时候,html的内容还没有加载到,那么系统找不到这个对象,就会跳过去,所以没有执行,加了ready,是等html加载完毕,再执行js,我提的那个方法与ready等价
大约一年之前 回复
judas_jia
judas_jia 在reday函数里面放着啊。。。并且js的引用在代码最底部,而且,为啥我那样改就可以出来了。。。。
大约一年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.09.11 07:10

看下浏览器的输出控制台是不是报错了呢?浏览器的开发者模式F12.

showbo
showbo   Ds   Rxr 2016.09.12 10:10

发此代码的前后部分,怎么用的,如果是ajax等异步操作需要在回调里面执行,要不没返回执行了获取不到dom当然没有效果了

Csdn user default icon
上传中...
上传图片
插入图片