Openlayers和Jquery自动完成从矢量图层打开弹出窗口

时间:2014-03-25 11:12:21

标签: javascript jquery autocomplete popup

我正在使用Openlayers在线开发地图。在那张地图上,我有一个显示餐馆的Vector层。每个餐厅都有一个图标,可以点击打开弹出窗口以显示更多信息。到现在为止还挺好。但我想在Jquery中实现自动完成搜索。 所以我想要做的是当你在自动完成中选择一个餐馆名称时我希望地图打开相应的弹出窗口(触发弹出窗口加中心地图和缩放)。 我设法使地图居中,但我无法弄清楚弹出窗口。

这里是我用于自动填充的代码:

$(function() {
$( "#searchresto" ).catcomplete({
    delay: 0,
    source: "select_resto.php",
     select: function ( event, ui ) 
        {
            map.setCenter(
            new OpenLayers.LonLat( ui.item.h_lon, ui.item.h_lat).transform(
                    new OpenLayers.Projection(Geo_pjt),
                    map.getProjectionObject()
                    ), 5 );
        },

     open: function () {
        $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top");
        },
     close: function () {
        $( this ).removeClass( "ui-corner-top").addClass("ui-corner-all");
        }

});});

那是我的Vector层:

var resto = new OpenLayers.Layer.Vector("GML", {
            protocol: new OpenLayers.Protocol.HTTP({
                url: "restaurant.php",
                format: new OpenLayers.Format.GML(),

            }),
            strategies: [new OpenLayers.Strategy.Fixed()],
            projection: map.displayProjection,
        });

有没有人知道如何在Jquery函数中调用弹出窗口?或者也许我想做的事情是不可能的?

1 个答案:

答案 0 :(得分:2)

经过长时间的敲击桌面后,我终于找到了答案。

如果您有兴趣,请参阅以下内容:

首先在自动填充的输入上添加“onchange =”yourfunction()“

 <input type="text" id="searchresto" onchange="yourfunction(this)"/>

然后在你的开放层:

function getFeatureByHid(featureHId) {
        var feature = null;
        var found = false;
        for(var i=0, len=resto.features.length; i<len; ++i) {
            if(resto.features[i].attributes.crID == featureHId) {
                feature = resto.features[i];
                found = true;
                break;
            }
        }

        return feature;
    }

    function SelectRestoByRestoId(crID)
    {
        var feature = getFeatureByHid(crID);
        if (feature)
        {
            restoSelect.unselectAll();
            restoSelect.select(feature);
        }
        return true;
    }   

    function yourfunction(event,ui){
        return SelectRestoByRestoId(ui.item.id);
    }

最后只需在你自动完成功能中调用你的功能

$(function() {
$( "#searchresto" ).catcomplete({
    delay: 0,
    source: "select_resto.php",
     select: yourfunction 

});});

完成!!!! 无论如何thx没有回答我真的发展我的Javascript技能! :) 我希望这能帮助别人!!!