ArcGIS Map と ArcGIS Web ADF のいくつかの基本的なコントロール (GoToLocation、ScaleBar、および ESRI Toolbar) を組み合わせた ASP.NET (.ascx) でユーザー コントロールを作成します。GoToLocation コントロールは、javascript が X 座標と Y 座標の表示に使用されるテキスト ボックスを検出できず、[ズーム] ボタンと [パン] ボタンも検出されなかったため、正しく機能していません。
次に、この jquery+javascript でそれを修正しようとします:
2012 年 5 月 21 日更新: fixGTL の後に GoToLocation1.Refresh または GoToLocation1.RaisePostBackEvent を追加しようとしましたが (以下のコードを参照)、コントロールが更新または再読み込みされていないようです。
$(document).ready(function () {
fixGTL();
<%
//GoToLocation1.RaisePostBackEvent("");
GoToLocation1.Refresh();
%>
});
function fixGTL() {
var txtX = $('#[id$="_GoToLocationX"]');
var idX = txtX.attr("id");
//alert(idX);
var idX_2 = idX.split('_');
if (idX_2.length = 6) {
txtX.attr('id', idX_2[0] + '_' + idX_2[2] + '_' + idX_2[3] + '_' + idX_2[4] + '_' + idX_2[5]);
}
var txtY = $('#[id$="_GoToLocationY"]');
var idY = txtY.attr("id");
//alert(idY);
var idY_2 = idY.split('_');
if (idY_2.length = 6) {
txtY.attr('id', idY_2[0] + '_' + idY_2[2] + '_' + idY_2[3] + '_' + idY_2[4] + '_' + idY_2[5]);
}
var btnZoomTo = $('#[id$="_ZoomTo"]');
var idZoomTo = btnZoomTo.attr("id");
var idZoomTo_2 = idZoomTo.split('_');
if (idZoomTo_2.length = 6) {
btnZoomTo.attr('id', idZoomTo_2[0] + '_' + idZoomTo_2[2] + '_' + idZoomTo_2[3] + '_' + idZoomTo_2[4] + '_' + idZoomTo_2[5]);
}
var btnPanTo = $('#[id$="_PanTo"]');
var idPanTo = btnPanTo.attr("id");
var idPanTo_2 = idPanTo.split('_');
if (idPanTo_2.length = 6) {
btnPanTo.attr('id', idPanTo_2[0] + '_' + idPanTo_2[2] + '_' + idPanTo_2[3] + '_' + idPanTo_2[4] + '_' + idPanTo_2[5]);
}
}
問題: 私のスクリプトはテキスト ボックスの ID とボタンの ID を正常に変更しますが、GoToLocation の JavaScript はテキスト ボックスとボタンを見つけることができません。
これは、Firebug から取得した JavaScript コードの一部です (申し訳ありませんが、私は初心者なので写真を投稿できません)。
ESRI.ADF.UI.GoToLocation.callBaseMethod(this, 'initialize');
(1) var id = this.get_id();
var splitId = id.split('_');
this._displayX = $get(splitId[0] + '_' + id + "_GoToLocationX");
this._displayY = $get(splitId[0] + '_' + id + "_GoToLocationY");
(2) this._zoomToButton = $get(splitId[0] + '_' + id + "_ZoomTo");
this._panToButton = $get(splitId[0] + '_' + id + "_PanTo");
(3) if (this._zoomToButton != null) {
$addHandler(this._zoomToButton, "mousedown", Function.createDelegate(this, this._zoomTo));
$addHandler(this._zoomToButton, "keydown", Function.createDelegate(this, this._zoomKeyPress));
}
奇妙な部分は、ブレークポイント 1 で firebug を使用してデバッグすると、テキスト ボックスとボタン (_displayX、_displayY、_zoomToButton、および _panToButton が null ではない) を見つけることができることです。しかし、ブレークポイント番号 2 または 3 からデバッグするか、(firebug でデバッグしないで) 直接ロードすると、スクリプトはテキストボックスとボタンを見つけることができませんでした。
HTML : これは、firebug から取得した HTML です。
<div id="pnlGoTo" class="ui-dialog-content ui-widget-content">
<span id="ctl00_MapBasic1_GoToLocation1" style="overflow:hidden;display:inline-block;height:75px;width:380px;">
<table cellspacing="2" cellpadding="2" style="position:relative;margin:0px 0px 0px 0px;top:0px;left:0px;">
<tbody>
<tr>
<td width="381px" align="left">
<table cellspacing="2" cellpadding="2">
<tbody>
<tr>
<td>
X:
<input id="ctl00_ctl00_MapBasic1_GoToLocation1_GoToLocationX" type="text" style="height:15px;font-size:small;width:157px;" name="ctl00$MapBasic1$ctl00_MapBasic1_GoToLocation1_GoToLocationX">
</td>
<td>
Y:
<input id="ctl00_ctl00_MapBasic1_GoToLocation1_GoToLocationY" type="text" style="height:15px;font-size:small;width:157px;" name="ctl00$MapBasic1$ctl00_MapBasic1_GoToLocation1_GoToLocationY">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td align="right">
<input id="ctl00_ctl00_MapBasic1_GoToLocation1_ZoomTo" type="button" style="height:25px;width:70px;font-size:small;" value="Zoom To" name="ctl00$MapBasic1$ctl00_MapBasic1_GoToLocation1_ZoomTo">
<input id="ctl00_ctl00_MapBasic1_GoToLocation1_PanTo" type="button" style="height:25px;width:70px;font-size:small;" value="Pan To" name="ctl00$MapBasic1$ctl00_MapBasic1_GoToLocation1_PanTo">
</td>
</tr>
</tbody>
</table>
</span>
</div>
</div>
目標 :
目標は、_displayX、_displayY、_zoomToButton、および _panToButton が null にならないようにすることです。
名前が私のJavaScriptから変更されているため、コントロールをリロード/リフレッシュする方法を見つける必要があります。
ありがとう