前言
传字符串类型
函数不在拼接字符串里
这种是最常见的情况,不用多说。
函数在拼接字符串里
传递字符串变量时,要加双引号。不然会报错。
示例
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='#' οnclick='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;\" οnclick=\"call(\'"+d.telephone+"\')\"/>"
+ "<br/>登记时间:" + d.REG_DATE
+ " <input type='button' value='分析' οnclick='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!" οnclick="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);' οnclick=\"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);' οnclick=\"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需要绑定事件的话,这种方式就不太好用了。
待解决。