0

我正在使用 HTML 表单的 post 方法将用户输入请求发送回写入我的页面的 perl 文件。我的问题与带有蓝色背景的部分的经纬度搜索框有关。我已将此示例中的代码添加到我的地图中,该代码引入了一个函数,鼠标单击的纬度/经度在单击事件中闪烁。

有没有办法可以将此功能与我的表单集成?我能不能

a)添加打开和关闭此功能的表单按钮?(所以不是每次点击都会搜索数据库)

b) 采用 post 方法,或类似的方法将来自点击的坐标发送回我的 perl 文件?

这是相关的javacript:

OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, 
{
    defaultHandlerOptions: 
    {
        'single': true,
        'double': false,
        'pixelTolerance': 0,
        'stopSingle': false,
        'stopDouble': false
    },
    initialize: function(options) 
    {
        this.handlerOptions = OpenLayers.Util.extend({}, this.defaultHandlerOptions);
        OpenLayers.Control.prototype.initialize.apply(this, arguments); 
        this.handler = new OpenLayers.Handler.Click(this, 
        {
            'click': this.trigger
        }
        , this.handlerOptions);
    }, 
    trigger: function(e) 
    {
        var lonlat = map.getLonLatFromPixel(e.xy);
        alert("You clicked near " + lonlat.lat + " N, " +
                                  + lonlat.lon + " E");
    }
});

然后在地图初始化中我也使用

var click = new OpenLayers.Control.Click();
map.addControl(click);
click.activate();

html表格是这样的:

<form action='maps7.pl' method='post'>
    Latitude: <input type="float" name="lat"><br>
    Longitude: <input type="float" name="long"><br>
    <INPUT TYPE="submit" VALUE="What maps are here?"><br>
    OR<br>
    Place Name: <input type="text" name="place"><br><br>
</form>

我目前使用 运行查询结果perl dbi,使用此代码将它们保存为变量:

$cgi = new CGI;

for $key ($cgi->param()) 
{
    $input{$key} = $cgi->param($key);
}

$searchseries = $input{series};
$slat = $input{lat};
$slong = $input{long};

因此,如果需要,我希望该函数能够更改$slat$slong/或形成新变量。

4

1 回答 1

0

您应该通过 JavaScript 获取纬度和对数,并设置表单输入的 value 属性。在每个输入中设置一个 id,以便您可以通过 JavaScript 选择它们,您可以使用jQuery或纯 JS 来实现这一点。理想情况下,用户应该能够通过鼠标点击手动输入坐标。通过在单击位置绘制一些标记来提供一些视觉反馈也很有用。

于 2013-07-12T08:41:57.293 回答