您的位置:首页 > Web前端 > JavaScript

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/25626143
js拼接字符串时,字符串的事件参数需要传对象或对象数组的处理方法
有时候在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需要绑定事件的话,这种方式就不太好用了。
待解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  js函数传参