js函数之函数传参
2015-12-17 11:35
741 查看
前言
传字符串类型
函数不在拼接字符串里
这种是最常见的情况,不用多说。函数在拼接字符串里
传递字符串变量时,要加双引号。不然会报错。示例
case "risk": infoWindow = new AMap.InfoWindow({ id : "infoWindow" + lastMarkerIndex, content : "<h3><span style='font-size:16px; color: #565656;'>" + d._name + "</span> <a class='poi-more' href='#' onclick='doViewDetail(\"" + d.ID + "\");'>详情></a></h3>" + "<br/>地址:" + d._address + "<br/>联系人:" + d.CONTACT_NAME + "<br/>联系电话:" + d.telephone + "<img src=\"images/common/phone.png\" style=\"width:30px;height:30px;\" onclick=\"call(\'"+d.telephone+"\')\"/>" + "<br/>登记时间:" + d.REG_DATE + " <input type='button' value='分析' onclick='analyze(\"" + new AMap.LngLat(lngX, latY) + "\");'>" + "</td></tr></table></div>", size : new AMap.Size(370, 0), autoMove : false, offset : new AMap.Pixel(0, -30) }); break;
传对象类型
函数不在拼接字符串里
可以直接传递对象变量。示例
<script> function a(){ var obj = {}; obj.i = "aaa"; b(obj); //可以直接传递对象变量 } function b(obj){ alert(obj.i); } </script> <input type="button" value="Click Me!" onclick="a();">
函数在拼接字符串里
如果直接传递的话,则会报错
示例$(document).ready(function(){ var dd=[]; for(var i=0;i<3;i++){ var obj ={}; obj.a='i'+i; obj.b='j'+i; dd.push(obj); } var html="<a href='javascript:void(0);' onclick=\"fn_test("+dd+");\">aaaaa</a>"; //会报错! $("#test").append(html); }); function fn_test(b){ for(var i=0;i<b.length;i++){ alert(b[i].a); } }
解决方法
1、事件函数放在拼接字符串外面 http://m.blog.csdn.net/blog/PZ0605/25626143js拼接字符串时,字符串的事件参数需要传对象或对象数组的处理方法 有时候在js拼接字符串时,需要传递对象或对象数组,这时候直接将事件拼接在html达不到想要的效果,如 $(document).ready(function(){ var dd=[]; for(var i=0;i<3;i++){ var obj ={}; obj.a='i'+i; obj.b='j'+i; dd.push(obj); } var html="<a href='javascript:void(0);' onclick=\"fn_test("+dd+");\">aaaaa</a>"; $("#test").append(html); }); function fn_test(b){ for(var i=0;i<b.length;i++){ alert(b[i].a); } } dd参数为对象数组,直接这样做会对象参数会成为一个字符串传递过去,而达不到预料的效果,我们可以换种思路:先把生成的html字符串apend到页面上,然后再给节点绑定事件. 解决办法: $(document).ready(function(){ var dd=[]; for(var i=0;i<3;i++){ var obj ={}; obj.a='i'+i; obj.b='j'+i; dd.push(obj); } var html=$("<a href='javascript:void(0);'>aaaaa</a>"); $("#test").append(html); html.click(function(){ fn_test(dd); }); }); function fn_test(b){ for(var i=0;i<b.length;i++){ alert(b[i].a); } } 或者 $(document).ready(function(){ var dd=[]; for(var i=0;i<3;i++){ var obj ={}; obj.a='i'+i; obj.b='j'+i; dd.push(obj); } var html="<a id="testNode" href='javascript:void(0);'>aaaaa</a>"; $("#test").append(html); $("testNode").bind("click",function(){ fn_test(dd); }); }); function fn_test(b){ for(var i=0;i<b.length;i++){ alert(b[i].a); } } 这样即达到想要的效果
2、1解决方法不好的地方是,因为如果有很多个input需要绑定事件的话,这种方式就不太好用了。
待解决。
相关文章推荐
- 译~GreenSock动画平台(GSAP)的JavaScript版本入门
- javascript收集整理
- JS禁用页面上所有控件的实现方法(附demo源码下载)
- Ext.js5的面板(2)
- JavaScript多线程之一~~HTML5中的Web Worker
- Moment.js 超棒Javascript日期处理类库
- MyEclipse去掉烦人的javascript文件报错
- MyEclipse去掉烦人的javascript文件报错
- 使用chrome浏览器对javascript进行调试
- Js获取当前日期时间及其它操作
- JavaScript 中级篇
- JavaScript(5) - 相等操作符(==和===)
- IE引起onbeforeunload异常解决
- [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】
- javascript学习笔记
- [Servlet&JSP] 表达式语言EL
- jsp 文件引入
- js控制跳转页面常用的几种方法
- JSON和类之间的转换
- jsoncpp解析 json对象