将事件写在html中就能执行整体事件,写在js里为什么不能执行?
2011-09-26 16:41
316 查看
<body> <div id="div1" onclick="fn(event)" style="width:200px; height:200px; background-color:#0CC"> 1111 </div> </body> </html> <script type="text/javascript"> var oDiv = document.getElementById("div1") function fn(event){ alert(event.target.id); } //oDiv.onclick=function(){fn(event)}为什么我把代码放在这里不能执行,而放在id为div1的html标签内就能执行。 </script>
解决方法: 以上代码在火狐里确实不行,原因如下: oDiv.onclick=function(){fn(event)} 这样写,fn(event)的event相当于是实参,而这个event在外面的那个匿名方法里是没有定义的(在IE中是定义了的,就是 window.event这个全局的事件对象),没有定义就是undefined,所以不行。改成 oDiv.onclick=function(event){fn(event)} 就可以了 ------------------------------------------------------------------------------------------------------- <div id="div1" onclick="fn(event)" style="width:200px; height:200px; background-color:#0CC">为什么这样就行呢,因为火狐在处理这个onclick="fn(event)"时,会自动的把这个 代码转化为onclick=function(event){fn(event)} 。在用FireBug调试的时候会发现是这样的。 注意:里面的参数一定要是event才行,要不然也会报错。
相关文章推荐
- 将事件写在html中就能执行整体事件,写在js里为什么不能执行?
- 在html链接里执行js和使用标签事件执行的不同
- Ajax 动态载入html页面后不能执行其中的js快速解决方法
- springMVC访问静态资源:为什么图片/js/css等文件写在jsp中是404不能获取
- 【.Net码农,HTML/JS】在TextBox中按下回车键时执行按钮事件
- 原生js实现下拉到底事件(2)-解决为什么ie下的onscroll事件轮滚过快就执行了2次呢?
- 在C# WebBrowser控件插入JS代码并执行,可以修改js就能对html执行任意操作
- ajax 载入html后不能执行其中的js解决方法
- .net 服务器事件和客户端js事件的执行顺序以及在脚本运行前定义脚本要修改的 HTML 元素
- <script type="text/template">是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?
- JS动态插入HTML后不能执行后续JQUERY操作
- js的function为什么不能执行?
- [DHTML]让人郁闷的mouse Capture,为什么总是只能执行一个事件,不能执行后续的事件?
- ajax 载入html后不能执行其中的js解决方法
- HTML 标签执行事件的JS分析, 以常用的 <a> 标签为例
- JS动态生成HTML时,on不能绑定事件
- C# dll 事件执行 js 回调函数
- HTML事件的执行顺序
- js 动态生成html 触发事件传参字符转义
- js $.each用return 后为什么后面的js还可以执行