2012-09-10 2 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 & Long 값을 숨겨진 텍스트 상자에 씁니다. , LNG는

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")); 

가 그럼 난 위도 쓰기 : 내가 첫 번째 행을 선택하는 경우 예를 들어, 그것은 'GATWICK 철도 CONCOURSE'

여기

이다 JQuery와 코드에 대한 위도 긴 값을 인 184161536, -586944를 작성합니다 값을 숨겨진 텍스트 상자에 입력하십시오.

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

올바른 위도 경도 값이 선택되지 않은 이유는 무엇입니까?

난 단지 선택한 행의 위도 longtitude 값을 얻을 수 있어야합니다.

아무도이 문제를 도와 줄 수 없다면 나는 아주 좋을 것입니다! :-)

답변

7

이 같은 코드가있을 때 :

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

foo하는 9을 될 것입니다. 그게 무슨 일이 일어나고 있는지, 당신의 latlng 값은 루프의 마지막 값입니다. 왜냐하면 그 값이 설정되어 있기 때문입니다.

foofor() 루프 내부 또는 외부에 선언해도 상관이 없습니다. 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); 
    } 
관련 문제