在javascript中将对象传递给函数(一个函数到另一个函数)

时间:2014-03-25 18:13:56

标签: javascript jquery

当我在鼠标悬停时传递对象时,我没有在函数中获取对象数据,并且映射网页卡住加载。此框文字在地图上有图像框架。

代码:

function imagefream(Info) {

//Info having data(Info.Lat,Info.Long....etc)

    alert(Info.toSource()) //get all data of lat,lon,id..etc
    var boxText = document.createElement("div");
    boxText.innerHTML = '<div id=\"outer\" style=\"overflow: auto; cursor: default; clear: both; position: relative; background-color: rgb(0, 136, 204); border-color: rgb(0, 136, 204); border-style: solid; border-radius: 5px; border-width: 1px; padding: 3px; width: 50px; height: 50px;\"  onMouseOver=\"funinfo(' + Info + ');\" >' +
        '</div>';
    return boxText;
}

function funinfo(Info) {
    alert("123");
    alert(Info.toSource());
}

2 个答案:

答案 0 :(得分:2)

您正在将字符串连接到对象 - &gt; '...onMouseOver=\" funinfo('+Info+');\"...'

它会产生类似的东西 - &gt; 'onMouseOver="funinfo([object Object]);"'

似乎你想要做的是调用函数funinfo传递对象Info,这就是你在onMouseOver属性中需要的东西。您的代码应该是这样的 - &gt; 'onMouseOver=\" funinfo(Info);\"'。无需连接对象。

请注意,Info应位于您的窗口或全局空间中。

答案 1 :(得分:1)

这是您的问题的解决方案。注意我正在声明一个名称空间

    var myNamespace = myNamespace || {};
$(document).ready(function(){   
    myNamespace.info = {Lat: 42.123456789, Lng: -41.123456789}; // some object
    myNamespace.funinfo = function (Info) {
    console.log("logging from funinfo: " + Info.Lat + "," + Info.Lng);
}
    myNamespace.imageFrame= function(Info){
    myNamespace.info = Info;
    console.log("logging from imageFrame: " + myNamespace.info.Lat + "," + myNamespace.info.Lng);
    var boxText = document.createElement("div");
    boxText.innerHTML = '<div id=\"outer\" style=\"overflow: auto; cursor: default; clear: both; position: relative; background-color: rgb(0, 136, 204); border-color: rgb(0, 136, 204); border-style: solid; border-radius: 5px; border-width: 1px; padding: 3px; width: 50px; height: 50px;\"' +
    'onMouseOver=\"myNamespace.funinfo(myNamespace.info);\" >' +
        'MyDIb</div>';
    return boxText;
}
    var d = myNamespace.imageFrame(myNamespace.info);
    document.body.appendChild(d);   

});