2012-09-10 26 views
1

我正在一個郵政編碼(機場&火車站)搜索,但似乎無法弄清楚爲什麼選定的行值不寫入正確的值到隱藏文本框。jquery - 將選定的行值傳遞給一個隱藏的文本框

基本上,如果我搜索 '蓋特威克',如下圖所示:

enter image description here

我得到以下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值寫入隱藏文本框。例如,如果我選擇第一行,它會寫184161536, -586944這是「蓋特威克鐵路CONCOURSE」

這裏是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")); 

然後我寫的緯度,經度值到隱藏文本框:

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

任何想法爲什麼沒有選擇正確的緯度經度值?

我只需要能夠獲得所選行的緯度經度值。

如果有人能幫到這個,我會非常感激! :-)

回答

7

當你有這樣的代碼:

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

foo將是9。這就是發生了什麼事情,您的latlng值只是循環中的最後一個值,因爲這是您設置它們的位置。

請注意,在for()循環內還是在外部聲明foo無關緊要; 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); 
    } 
相關問題