照抄书里的代码但函数无法执行、求分析( Uncaught ReferenceError: xxx is not defined)

lenkaren 2014-09-29 09:02:42
函数的功能是实现html文档下的<p>元素内容向某个指定位置以动画的方式移动。

html部分的代码,文件名:message.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="scripts/addLoadEvent.js"></script>
<script type="text/javascript" src="scripts/moveMessage.js"></script>
<script type="text/javascript" src="scripts/positionMessage.js"></script>
<title>MoveMessage</title>
</head>
<body>
<p id="message">Whee!!!</p>
</body>
</html>


同一个路径下的scripts文件夹内的三个javascript文件

1、scripts/addLoadEvent.js,可以不断绑定函数到window.onload事件上:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}


2、scripts/moveMessage.js,定义函数来移动元素,再由下面的positionMessage.js负责传递参数;
function moveElement(elementID,final_x,final_y,interval){
if (!document.getElementById) return false;
if (!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
var xpos=parseInt(elem.style.left);
var ypos=parseInt(elem.style.top);
if (xpos==final_x && ypos==final_y){
return true;
}
if(xpos<final_x){
xpos++;
}
if(xpos>final_x){
xpos--;
}
if(ypos<final_y){
ypos++;
}
if(ypos>final_y){
ypos--;
}
elem.style.left =xpos+"px";
elem.style.top =ypos+"px";
var repeat="moveElement("+'elementID'+","+final_x+","+final_y+","+interval+")";
movement=setTimeout(repeat,interval);//每interal毫秒递归调用一次moveElement()
}


3、scripts/positionMessage.js,获取指定元素和定义其初始位置,再调用moveMessage.js
function positionMessage(){
if(!document.getElementById) return false;
if(!document.getElementById("message")) return false;
var elem=document.getElementById("message");
elem.style.position="absolute";
elem.style.left="400px";
elem.style.top="300px";
moveElement("message",250,250,20);
}
addLoadEvent(positionMessage);//页面加载完毕时执行positionMessage


最后再问一个问题……下面用一串字符串传递参数的语法我无法理解,高手求分析,里面的加号、双引号、单引号都是怎么一回事?(这两行代码位于moveElement函数内)
var repeat="moveElement("+'elementID'+","+final_x+","+final_y+","+interval+")";
movement=setTimeout(repeat,interval);//每interal毫秒递归调用一次moveElement()


附上目前函数的运行情况截图。顺带一提,如果我把positionMessage.js内第8行的”message“改成message(就是消除双引号,不会有js报错,但动画函数依旧无法生效)
...全文
12351 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_dataname 2016-03-04
  • 打赏
  • 举报
回复
我改了还是不行呢
lenkaren 2014-10-02
  • 打赏
  • 举报
回复
引用 6 楼 tongki_88 的回复:
在这个: var repeat="moveElement('"+ elementID +"',"+final_x+","+final_y+","+interval+")"; 的下页加一行: alert(repeat); 你就知道了。
哈哈,的确懂了。关键是要把值message正确传递过去。理解后用下面的代码也能实现同样效果了~
var repeat="moveElement(\""+elementID+"\","+final_x+","+final_y+","+interval+")"
tongki_88 2014-09-30
  • 打赏
  • 举报
回复
在这个: var repeat="moveElement('"+ elementID +"',"+final_x+","+final_y+","+interval+")"; 的下页加一行: alert(repeat); 你就知道了。
tongki_88 2014-09-29
  • 打赏
  • 举报
回复
在positionMessage()中,那个var elem=document.getElementById("message");的前后加alert();看看是否有执行到该步?
笑梦码侬生 2014-09-29
  • 打赏
  • 举报
回复
repeat就是一段字符串,然后这段字符就是前面moveElement函数,这个函数通过定时器来触发,作为回调函数。 elementID这样的一个ID号,你在网页中找不到,所以出现未定义。
lenkaren 2014-09-29
  • 打赏
  • 举报
回复
引用 4 楼 tongki_88 的回复:
function moveElement(elementID,final_x,final_y,interval){...} moveElement("message",250,250,20); 可见,elementID是局部字符串变量,此例中的值是"message",而不是'elementID' var repeat="moveElement('"+ elementID +"',"+final_x+","+final_y+","+interval+")";
谢谢解答!改了代码果然生效了。可惜还不是十分理解……T-T 是不是生效的原因是相当于执行了 : moveElement('elementID',250,250,20);? (抱歉一时间也不知道怎么问好,请等我有空再仔细思考下、或者要好好想该怎么问才好……诶,还在加班伤不起) 再次感谢前辈的热心帮助。
tongki_88 2014-09-29
  • 打赏
  • 举报
回复
function moveElement(elementID,final_x,final_y,interval){...} moveElement("message",250,250,20); 可见,elementID是局部字符串变量,此例中的值是"message",而不是'elementID' var repeat="moveElement('"+ elementID +"',"+final_x+","+final_y+","+interval+")";
tongki_88 2014-09-29
  • 打赏
  • 举报
回复
//找到问题了,
//var repeat="moveElement("+ 'elementID' +"',"+final_x+","+final_y+","+interval+")";
//改成:
var repeat="moveElement('"+ elementID +"',"+final_x+","+final_y+","+interval+")";
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
源码链接: https://pan.quark.cn/s/a4b39357ea24 小程序雷达 AI 驱动的小程序生态选型与风险评估工具,把微信小程序开发资源转化为可筛选、可评估、可对比的技术雷达。 线上地址 主站: Vercel: 适合谁 正在做微信小程序技术选型的产品、研发和架构团队。 需要判断 Taro、uni-app、原生小程序、组件库、云开发和 SDK 风险的团队。 需要把历史 awesome 列表转成可筛选、可对比、可验证技术雷达的维护者。 可以做什么 Radar:按推荐状态、风险等级、资源类型、分类和适用场景浏览小程序生态资源。 Quick Search:快速搜索资源并跳转常用页面。 Compare:对比 Taro、uni-app、原生小程序等核心方案。 Advisor:输入选型问题,获得推荐结论、适用/不适用条件、迁移成本、下一步和证据来源。 Doctor:粘贴小程序项目配置,识别框架依赖、过时方案和迁移风险。 Weekly:查看小程序生态周报和近期风险信号。 数据概览 当前数据集中包含 236 个小程序生态资源。 完整资源可在 Radar 页面和导出能力中查看。 核心样例 Taro ★30.6k+ - 使用 React 的方式开发小程序的框架,同时支持生成多端应用 uni-app ★36.1k+ - 使用 Vue 语法开发小程序、H5、App的统一框架 MPX ★2.1k+ - 增强型小程序框架,深度性能优化,支持跨小程序平台开发,完全兼容原生小程序组件 WePY ★21.7k+ - 支持组件化的小程序开发框架 vant-weapp ★12.3k+ - 高颜值、好用、易扩展的微信小程序 UI 库 tdesign-miniprogram ★1.3...

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧