如何通过按钮onclick来调整infowindow的大小? +更改infowindow的内容

时间:2015-04-07 10:17:41

标签: javascript jquery html json

我已经尝试了很多不同的方法来写这个,但我真的不明白我是怎么做到的。我是javascript的新手,所以也许这对你来说很容易。

当我点击地图上的标记时,我有信息框。我想要更多"更多"信息框中的按钮。当有人点击按钮时,信息框将调整大小并更改内容。如何使用javascript和HTML编写它?

resizeWindow = function (stringItem, isResized) {
    var eventItem = JSON.parse(stringItem);
    processLocation(eventItem, isResized);
};

processLocation = function (eventItem, isResized) {
    var i, contentString, myOptions, ib, markerOptions, marker, infoWindowWidth;

    console.log("---> event is stoned: " + eventItem.name);

    var stringItem = JSON.stringify(eventItem);

    if (!isResized) {
        infoWindowWidth = "450px";
        contentString =
        '<div class="eventitem-content">' +
            '<div class="eventitem-bodycontent">' +
                '<div class="eventitem-title">' + eventItem.name + '</div><img src="/Content/LandfillPhotos/' + eventItem.photo_number + '.png" alt="Landfill" style="width:425px;height:335px"/>' +
                '<div class="eventitem-company">' + eventItem.company + '</div><div class="eventitem-address">' + eventItem.company_address + '</div>' +
                '<button onclick="FBN.events.resizeWindow('+ stringItem + ', true)">Více</button>' +
            '</div>' +
        '</div>';
        console.log(isResized);
    } else {
        infoWindowWidth = window.screen.availWidth + "px";
        contentString =
        '<div class="eventitem-content">' +
            '<div class="eventitem-bodycontent">' +
                '<div class="eventitem-title">' + eventItem.name + '</div><img src="/Content/LandfillPhotos/' + eventItem.photo_number + '.png" alt="Landfill" style="width:425px;height:335px"/>' +
                '<div class="eventitem-company">' + eventItem.company + '</div><div class="eventitem-address">' + eventItem.company_address + '</div>' +
                '<button onclick="FBN.events.resizeWindow(' + stringItem + ', false)">Více</button>' +
            '</div>' +
        '</div>';
    }


    myOptions = {
        content: contentString,
        disableAutoPan: false,
        maxWidth: 0,
        pixelOffset: new google.maps.Size(-140, 4),
        zIndex: null,
        boxStyle: {
            width: infoWindowWidth
        },
        closeBoxMargin: "6px",
        closeBoxURL: "https://www.google.com/intl/en_us/mapfiles/close.gif",
        infoBoxClearance: new google.maps.Size(1, 1),
        isHidden: false,
        pane: "floatPane",
        enableEventPropagation: false
    };

    ib = new InfoBox(myOptions);
    infoWindows.push(ib);

    markerOptions = {
        position: new google.maps.LatLng(eventItem.latitude, eventItem.longitude),
        map: map,
        title: eventItem.name,
        icon: 'https://cdn1.iconfinder.com/data/icons/Map-Markers-Icons-Demo-PNG/32/Map-Marker-Marker-Outside-Azure.png'
    }

    marker = new google.maps.Marker(markerOptions);
    markers.push(marker);

    createListener(marker, map, ib);
};

当我这样做的时候,控制台写道:意外的令牌;

'<button onclick="FBN.events.resizeWindow('+ stringItem + ', true)">Více</button>' +

这一行是问题

1 个答案:

答案 0 :(得分:0)

这是一个非常复杂的情况,一旦解决了这个直接问题,变量范围很快就会出现更多问题。我将向您展示如何解决与Unexpected token ;有关的立即问题。

你处在一个带引号和JSON的困境中。以您的代码为例:

'<button onclick="FBN.events.resizeWindow('+ stringItem + ', true)">Více</button>'

您的stringItem不再只是一个变量,但其内容将在上面内联。如果它具有任何未转义的单引号或双引号,则会导致错误。

以下是我恢复的示例stringItem

{"name":"Skládka odpadů S-OO3 se sektorem S-OO1 Ďáblice","county_code":"CZ010", ... ,"longitude":"14.482411","photo_number":"1"}

换句话说,您实际上是在编写这个动态HTML。请注意双引号:

<button onclick="FBN.events.resizeWindow({"name":"Skládka odpadů S-OO3 se sektorem S-OO1 Ďáblice","county_code":"CZ010", ... ,"longitude":"14.482411","photo_number":"1"}, true)">Více</button>

首先,您需要用单引号括住此文字字符串。所以我们需要这个:

'<button onclick="FBN.events.resizeWindow(\''+ stringItem + '\', true)">Více</button>'

这足以让您解决问题,但要更进一步,而不是

var stringItem = JSON.stringify(eventItem);

您应该对stringItem 更多进行编码以删除所有引号。我让你的代码使用了这个:

var stringItem = utf8_to_b64(JSON.stringify(eventItem));

我在其中包含了这些名称不言自明的有用函数:

function utf8_to_b64( str ) {
  return window.btoa(unescape(encodeURIComponent( str )));
}

function b64_to_utf8( str ) {
  return decodeURIComponent(escape(window.atob( str )));
}

当我对您提供的网站(使用Chrome开发工具)进行修改时,您的&#34;副&#34;按钮现在像这样呈现

<button onclick="FBN.events.resizeWindow('eyJuYW1lIj ... IjoiMyJ9', true)">Více</button>

现在是有效的语法。您的问题是onclick处理程序期望找到FBN.events.resizeWindow()的地方。但那是一个不同的问题。 :)

以下是我尝试过的一些更改:http://pastebin.com/Uczwct8H