1.0 TypeError: $(...).carousel is not a function
原因:可能是没有引用或者引用了多个jquery:
<script src="~/js/jquery-1.8.2.js"></script>
<script src="~/Script/jquery-1.8.2.js"></script>
2.0 闭包
1 function AddMark(map, markJsonArray) {
2 var max = markJsonArray.length;
3 for (var i = 0; i < max ; i++) {
4 var item = markJsonArray[i];
5 var point = new BMap.Point(item.LocationLong, item.LocationLat);
6 var marker = new BMap.Marker(point); // 创建标注点
7 map.addOverlay(marker); // 将标注添加到地图中
8
9 //*****闭包引起的问题*****:如果用以下写法,会给所有的marker都注册同样的点击事件(即提示内容相同)
10 //在上面这段代码中,脚本被载入内存后,并没有为函数 addEventListener() 计算变量 item.pId 的值。
11 //该函数捕获 item.pId 的值只是为了以后的使用,也就是说,解释程序知道在调用该函数时要检查 item.pId 的值。
12 //item.pId 将在函数调用 addEventListener() 时被赋值;item.pId值为markJsonArray[max-1].pId。
13 marker.addEventListener("click", function () {
14 alert("要跳转的url-->" + item.pId);
15 });//也就是说,页面加载过程中, 注册点击marker时, 提示 "要跳转的url-->" + item.pId .这个时候去找item变量的值.
16 //用户操作是, 页面已加载完毕, 此时 item的值在页面加载过程中,经过for循环一系列改变后,最终是 markJsonArray[max-1] .
17 //导致结果,所有的marker点击事件提示内容一样.
18
19 //增加点击事件
20 marker.addEventListener("click", (function (iMark, iMarker) {
21 alert("我会一直出现!");
22 //var p = iMarker.getPosition(); //获取iMarker的位置
23 //alert("iMarker的位置是" + p.lng + "," + p.lat);
24 return alert("要跳转的url-->" + iMark.pId);
25 //window.location = iMark.url;
26 })(item, marker)); //每次执行到marker.addEventListener时,会执行 function (iMark, iMarker){} (item, marker) ,返回一个函数 *****这样,就解决闭包带来的问题*****
27
28 }