Javascript this.call不是一个函数
就我的一生而言,我看不出我错过了什么。我在drawmenu函数中硬编码了selectedIcon的值。在我把它改成参数之前,它一直工作得很好。我得到以下错误: 错误:此.call不是函数 源文件: 第19行 该例程绘制菜单,同时动态调整图像之间的间距Javascript this.call不是一个函数,javascript,jquery,css,Javascript,Jquery,Css,就我的一生而言,我看不出我错过了什么。我在drawmenu函数中硬编码了selectedIcon的值。在我把它改成参数之前,它一直工作得很好。我得到以下错误: 错误:此.call不是函数 源文件: 第19行 该例程绘制菜单,同时动态调整图像之间的间距 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>
Test image overlay
</title>
<script type="text/javascript" src="jquery-1.3.2.min.js">
</script>
<script type="text/javascript">
//<![CDATA[
function drawmenu (selectedIcon) {
var offset = 0;
for (x in icons) {
// Add the gap at the top of the image
if (selectedIcon-1 == x) {
offset += icons[x].topBig;
$("#"+icons[x].divid).toggleClass("active");
$("#"+icons[x].imgid).toggleClass("rollit");
} else {
offset += icons[x].topSmall;
}
// Set the location of the image
$("#"+icons[x].divid).css("top",-offset);
// Add the gap at the bottom of the image
if (selectedIcon-1 == x) {
offset += icons[x].bottomBig;
} else {
offset += icons[x].bottomSmall;
}
$("#"+icons[x].imgid).attr("src",icons[x].image);
}
}
var icons = [
{
"divid" : 'icon1', // Home
"imgid" : 'imgicon1',
"image" : 'home.png',
"topSmall" : 5,
"topBig" : 5,
"bottomSmall" : 5,
"bottomBig" : 7
},{
"divid" : 'icon2', // Alert
"imgid" : 'imgicon2',
"image" : 'alert.png',
"topSmall" : 7,
"topBig" : 13,
"bottomSmall" : 0,
"bottomBig" : 0
},{
"divid" : 'icon3', // Question
"imgid" : 'imgicon3',
"image" : 'question.png',
"topSmall" : 4,
"topBig" : 8,
"bottomSmall" : 5,
"bottomBig" : 7
},{
"divid" : 'icon4', // Lightbulb
"imgid" : 'imgicon4',
"image" : 'lightbulb.png',
"topSmall" : 3,
"topBig" : 7,
"bottomSmall" : 5,
"bottomBig" : 7
},{
"divid" : 'icon5', // Blog
"imgid" : 'imgicon5',
"image" : 'blog.png',
"topSmall" : 3,
"topBig" : 6,
"bottomSmall" : 1,
"bottomBig" : 4
},{
"divid" : 'icon6', // Defect
"imgid" : 'imgicon6',
"image" : 'defect.png',
"topSmall" : 7,
"topBig" : 10,
"bottomSmall" : 0,
"bottomBig" : 0
}]
$(document).ready(drawmenu(6));
//]]>
</script>
<style type="text/css">
/*<![CDATA[*/
#iconstack {
position: absolute;
top:30px;left:100px;
}
.icondiv { z-index:1; position: relative;}
.active { height:80px; }
.rollit {
height:50px;
}
.rollit:hover {
background-image:url('highlight.png');
background-color:red;
}
/*]]>*/
</style>
</head>
<body>
<div id="iconstack">
<div id="icon1" class="icondiv">
<img id="imgicon1" class="rollit" src="" alt="" />
</div>
<div id="icon2" class="icondiv">
<img id="imgicon2" class="rollit" src="" alt="" />
</div>
<div id="icon3" class="icondiv">
<img id="imgicon3" class="rollit" src="" alt="" />
</div>
<div id="icon4" class="icondiv">
<img id="imgicon4" class="rollit" src="" alt="" />
</div>
<div id="icon5" class="icondiv">
<img id="imgicon5" class="rollit" src="" alt="" />
</div>
<div id="icon6" class="icondiv">
<img id="imgicon6" class="rollit" src="" alt="" />
</div>
</div>
</body>
</html>
测试图像叠加
//
/**/
您的问题就在这一行的底部附近
$(document).ready(drawmenu(6));
你需要的是这个
$(document).ready(function() {
drawmenu(6);
});
基本上不是将函数传递给。ready,而是传递从drawmenu函数返回的任何内容。这实际上是一个小问题。您之前所做的是:
$(document).ready(drawmenu);
它传递了一个函数。您现在所做的是:
$(document).ready(drawmenu(6));
第二种方式是传递函数的结果,而不是函数本身,相当于:
var item = drawmenu(6);
$(document).ready(item);
请尝试:
$(document).ready(function(){ drawmenu(6); });
您正在调用drawmenu,而不是将其作为参数传递给jQuery的ready函数。修复方法是创建一个新函数并将该函数传递给jQuery:
$(document).ready(function() { drawmenu(6); });
你能提供关于错误的更多细节吗?也许可以使用Firebug或浏览器的调试工具来追溯调用链。这个错误发生在jquery内部,但是知道对jquery的调用首先发生在代码中的什么地方会很有帮助。我不太确定他的答案如何更好。在我看来,他的答案似乎是第一个。无论如何,虽然我理解这两个答案,但我认为代码看起来正确,但仍然错误的例子将对新的程序员有所帮助。希思兄弟称之为“知识的诅咒”。这在他们的书中:粘在一起。这是一本很棒的书。谢谢!这很有道理。