MVC テンプレートを使用して、ユーザーが複数のアドレスを追加できるようにします。ボタンをクリックすると、jquery を使用してテンプレートが呼び出され、フォームが生成されます。別の場所を追加したい場合は、ボタンをもう一度クリックすると、別のフォームが設定されます。このテンプレートは正常に機能しますが、これらのテンプレート内で Google マップを使用する際に問題が発生します。
このシナリオで Google マップを使用する理由は、追加する場所の経度と緯度を追加するための優れたインターフェイスを提供するためです。画面上に任意の数のアドレス領域が存在する可能性があるため、ここでは ID の代わりにクラスを使用しています。
私の mvc テンプレートには、次のマークアップがあります。
<div class="body">
<div class="st-form-line">
<span class="st-labeltext">Location</span>
<a href="#" class="GetPosition">Get Latitude & Longitude positions based on above address details.</a>
<div class="mapContainer" style="display:none;">
<p>If the map position is incorrect simply drag the pointer to the correct location.</p>
<div class="map" style="width: 450px; height: 350px;"><br/></div>
</div>
<div class="clear"></div>
</div>
<div class="st-form-line">
<span class="st-labeltext">@Html.LabelFor(model => model.Address.Longitude)</span>
@Html.EditorFor(model => model.Address.Longitude)
@Html.ValidationMessageFor(model => model.Address.Longitude)
<div class="clear"></div>
</div>
<div class="st-form-line">
<span class="st-labeltext">@Html.LabelFor(model => model.Address.Latitude)</span>
@Html.EditorFor(model => model.Address.Latitude)
@Html.ValidationMessageFor(model => model.Address.Latitude)
<div class="clear"></div>
</div>
</div>
私は次のjqueryを持っています(これは私に問題を与えているビットです):
$('a.GetPosition').live("click", function (evt) {
evt.preventDefault();
$(this).next().show();
var mapElement = $(this).closest('.body').find('.map');
var latElement = $(this).closest('.body').find('[id$=__Address_Latitude]');
var longElement = $(this).closest('.body').find('[id$=__Address_Longitude]');
showAddress(mapElement, latElement, longElement);
});
// Google Map
var map;
function showAddress(mapElement, latElement, longElement) {
var myLatlng = new google.maps.LatLng(40.713956, -74.006653);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(mapElement, myOptions);
var marker = new google.maps.Marker({
draggable: true,
position: myLatlng,
map: map,
title: "choose location"
});
google.maps.event.addListener(marker, 'click', function (event) {
latElement.val(event.latLng.lat().toFixed(5));
longElement.val(event.latLng.lng().toFixed(5));
});
}
今のところ、デフォルトのマップ位置 '40.713956, -74.006653' にハード コーディングしていますが、マップが正しく表示されるようになったら、実際の住所を使用するように変更します。
問題が「mapElement」にあることはわかっていますが、何が問題なのかわかりません。showAddress 関数呼び出しにコメントを付けてテキストを mapElement に出力すると、テキストが表示されるので、正しい DOM ロケーションが見つかったように見えます。
ここで試すことができるアイデアはありますか?ご協力いただきありがとうございます。
ありがとう、
リッチ