开发者社区> 问答> 正文

初学jQuery,求问自定义函数的位置问题?报错

今天在看《Head First jQuery》的第五章。以下是源码

<!-- HTML代码 -->
<img class="lightning" id="lightning1" src='images/lightning-01.jpg' />
<img class="lightning" id="lightning2" src='images/lightning-02.jpg' />
<img class="lightning" id="lightning3" src='images/lightning-03.jpg' />

<!-- CSS代码 -->
.lightning{
    display:none;position:absolute;left:0px;top:0px;
}

<!-- jQuery代码 -->
$(function(){
	 lightning_one();
	 lightning_two();
	 lightning_three();
});
function lightning_one(){
	$("#container #lightning1").fadeIn(250).fadeOut(250);
	setTimeout("lightning_one()",4000);
};
function lightning_two(){
	$("#container #lightning2").fadeIn("fast").fadeOut("fast");
	setTimeout("lightning_two()",5000);
};
function lightning_three(){
	$("#container #lightning3").fadeIn("fast").fadeOut("fast");
	setTimeout("lightning_three()",7000);
};

但如果把自定义函数放到$(function(){...})里(如下),只会在加载页面后执行一次,然后就报错undefined,这是怎么回事呢??

<!-- jQuery代码 -->
$(function(){
    function lightning_one(){
	$("#container #lightning1").fadeIn(250).fadeOut(250);
	setTimeout("lightning_one()",4000);
    };
    function lightning_two(){
	$("#container #lightning2").fadeIn("fast").fadeOut("fast");
	setTimeout("lightning_two()",5000);
    };
    function lightning_three(){
	$("#container #lightning3").fadeIn("fast").fadeOut("fast");
	setTimeout("lightning_three()",7000);
    };
    lightning_one();
    lightning_two();
    lightning_three();
});





展开
收起
爱吃鱼的程序员 2020-06-14 19:55:23 524 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    少年。。你把<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.3999996185303px;background-color:#FFFFFF;">setTimeout("lightning_one()",4000);换成<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.3999996185303px;background-color:#FFFFFF;">setTimeout(lightning_one,4000);就可以了。给你解释一下。setTimeout的第一个参数是传的function对象。如果你直接传的function引用就能立即调用到,如果你传的string,他会尝试为你封装出function对象,但是这时他会到域外去寻找,所以显示undefinedlightning_one放到里面,作用域是局部的,放到外面是全局的,setTimeout('lightning_one()', 第一个参数引的是全局域里的函数,引用不到所以就报错了

    另外

    <preclass="brush:js;toolbar:true;auto-links:false;">$("#container#lightning3").fadeIn("fast").fadeOut("fast");这种写法有问题的,fadeOut()要在fadeIn()的回调中执行

    <preclass="brush:js;toolbar:true;auto-links:false;">$("#lightning3").fadeIn('fast',function(){$this.fadeOut('fast');});





    2020-06-14 19:55:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关课程

更多

相关电子书

更多
JS 语言在引擎级别的执行过程 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载