1

郵便番号(空港と駅)の検索に取り組んでいますが、選択した行の値が非表示のテキストボックスに正しい値を書き込んでいない理由を理解できないようです。

基本的に、以下に示すように「ガトウィック」を検索すると、次のようになります。

ここに画像の説明を入力してください

次のXML応答を受け取ります。

<?xml version="1.0"?>
<addresslist resultcount="4">
    <address id="0" catagoryid="1" lat="184179968" lng="-639296">
        <companyname></companyname>
        <premiseno></premiseno>
        <streetname>GATWICK AIRPORT (NORTH)</streetname>
        <townname></townname>
        <postcode>RH6 0PJ</postcode>
    </address>
    <address id="1" catagoryid="1" lat="184161536" lng="-586944">
        <companyname></companyname>
        <premiseno></premiseno>
        <streetname>GATWICK AIRPORT (SOUTH)</streetname>
        <townname></townname>
        <postcode>RH6 0NP</postcode>
    </address>
    <address id="2" catagoryid="1" lat="184161664" lng="-580224">
        <companyname></companyname>
        <premiseno></premiseno>
        <streetname>GATWICK GATWICK AIRPORT RAILWAY STATION</streetname>
        <townname></townname>
        <postcode>RH6 0RD</postcode>
    </address>
    <address id="3" catagoryid="1" lat="184161536" lng="-586944">
        <companyname></companyname>
        <premiseno></premiseno>
        <streetname>GATWICK RAILWAY CONCOURSE</streetname>
        <townname></townname>
        <postcode>RH6 0NN</postcode>
    </address>
</addresslist>

現時点では、どの行を選択しても、常に最後のLat&Long値が非表示のテキストボックスに書き込まれます。たとえば、最初の行を選択すると184161536, -586944、「GATWICKRAILWAYCONCOURSE」の緯度経度の値が書き込まれます。

Jqueryコードは次のとおりです。

function buildResultView(xml_object,pageNum,rowdiv) {

// Remove existing page up page down click events
rowdiv.find('.lbl-addr-pgup').unbind('click');
rowdiv.find('.lbl-addr-pgdn').unbind('click');

// Remove result list if there is one
if (rowdiv.find('.ul-result-view')) {
    rowdiv.find('.ul-result-view').remove();
}

ul = $('<ul></ul>');
ul.addClass('ul-addr-res');
ul.addClass('ul-result-view');

// Prepend ul before resultinfo
rowdiv.find('.div-result-info').before(ul); 

// Reset result count
var resCount = 0;

// Count Results
$(xml_object).find('address').each(function(){
    resCount += 1;
});

// Pull out start row and max rows
var pageRes = clientPaginate(resCount,pageNum).split(',');
var loopMax = parseInt(pageRes[0]);
var currentRow = parseInt(pageRes[1]);
var lastPge = parseInt(pageRes[2]);
var addType;

// Show maxRows starting at startIndex  
for (var i = currentRow; i < loopMax; i++) {

    var li = $('<li></li>');
    li.addClass('li-addr-res');
    addType = parseInt($(xml_object).find("address[id='"+i+"']").attr("catagoryid"));
    var lat = ($(xml_object).find("address[id='"+i+"']").attr("lat"));
    var lng = ($(xml_object).find("address[id='"+i+"']").attr("lng"));

    li.css('cursor','pointer');

// Reset result count
var resCount = 0;

// Count Results
$(xml_object).find('address').each(function(){
    resCount += 1;
});

// Pull out start row and max rows
var pageRes = clientPaginate(resCount,pageNum).split(',');
var loopMax = parseInt(pageRes[0]);
var currentRow = parseInt(pageRes[1]);
var lastPge = parseInt(pageRes[2]);
var addType;

// Show maxRows starting at startIndex  
for (var i = currentRow; i < loopMax; i++) {

    var li = $('<li></li>');
    li.addClass('li-addr-res');
    addType = parseInt($(xml_object).find("address[id='"+i+"']").attr("catagoryid"));
    var lat = ($(xml_object).find("address[id='"+i+"']").attr("lat"));
    var lng = ($(xml_object).find("address[id='"+i+"']").attr("lng"));

次に、lat、lng値を非表示のテキストボックスに書き込みます。

    // Add this lat lng to hidden text box
    rowdiv.find('.hidden-lat-lng').val(lat+","+lng);

これが正しい緯度の経度の値を選択しない理由はありますか?

選択した行の緯度の経度の値を取得できる必要があります。

誰かがこれを手伝ってくれるなら、私はとても素晴らしいです!:-)

4

1 に答える 1

7

このようなコードがある場合:

for (var i = 0; i < 10; i++) {
   var foo = i;
}

fooになります9。それが起こっていることです、あなたlatlng値は単にあなたがそれらを設定している場所なので、ループの最後のものです。

fooループの内側で宣言するかfor()ループの外側で宣言するかは問題ではないことに注意してください。javascriptの変数スコープは、他の多くの言語のようにブロックレベルではなく、を使用varすると、これらの言語に関数のスコープが与えられます。

変数も再宣言しようとしています。それが単にコードをコピーして貼り付けた結果なのか、変数スコープの誤解によるものなのかはわかりませんが、いずれにしてもその後の効果はありません。関数の先頭でローカル変数を宣言するだけで、より明確になり、おそらく落とし穴が少なくなります。

おそらく、どの行が選択されているかを処理するコードがもっとあります。それが設定されたらlatlngそれをあなたの質問に投稿してください。そうでなければ、ここに私の見解があります:

for (var i = currentRow; i < loopMax; i++) {
    var li = $('<li></li>');
    li.addClass('li-addr-res');
    addType = parseInt($(xml_object).find("address[id='"+i+"']").attr("catagoryid"));

    lat = ($(xml_object).find("address[id='"+i+"']").attr("lat"));
    lng = ($(xml_object).find("address[id='"+i+"']").attr("lng"));

    // Store the latitude and longitude alongside the li element itself
    li.data('lat', lat).data('lng', lng);

    // add a handler to copy that data to the hidden textarea when clicked
    // I'm assuming you mean the row is selected when it's clicked, otherwise
    // just bind to something else
    li.click(function() {        
        // recover the data from this element (the <li>)
        var lat = $(this).data('lat'),
            lng = $(this).data('lng');

        // rowdiv is probably still in scope from the parent function,
        // though there is missing code in your question. I'm going to 
        // assume there's only one hidden textarea for this purpose
        $('.hidden-lat-lng').val(lat + "," + lng);
    }
于 2012-09-12T21:38:47.360 に答える