2011-01-07 3 views
10

버튼을 사용하여 onclick을 호출하여 사용자 위치를 검색 한 다음 해당 위치를 사용하여 다른 위치로 전화를 걸어 근처 위치 목록을 검색합니다. 어떤 이유로 인해 Geolocation 성공 방법이 두 번째 클릭시 두 번 호출됩니다.이 자바 스크립트가 두 번 호출되는 이유는 무엇입니까?

그래서 페이지를로드하고 버튼을 클릭하고 내 위치 사용 권한을 허용하면 인접한 위치를 얻기 위해 하나의 아약스 요청을합니다. 이것은 잘 작동합니다.

버튼을 다시 클릭하고 내 위치를 다시 사용할 수있는 권한을 허용하면 위치를 얻기 위해 하나의 아약스 요청을하고 ~ 2 초 정도 기다린 다음 허락없이 동일한 좌표를 사용하여 다시 요청할 수 있습니다. 따라서 성공 방법은 두 번 호출해야하지만 왜 확실하지 않습니다.

$("#FindLocation").click(function() { 
    myScript.findNearbyLocations(displayData, displayError); 
}); 

이 클릭 기능은 두 번 호출되지 않으며 displayData 및 displayError의 모든 코드를 주석 처리했습니다.

findNearbyLocations: function (onSuccess, onFailure) { 
    if (navigator.geolocation) { 
    browserSupportFlag = true; 
    navigator.geolocation.getCurrentPosition(function (position) { 
     alert('This is getting called twice except on the initial call.'); 
     myScript.findStores(position.coords.latitude, position.coords.longitude, onSuccess, onFailure); 
    }, function() { 
     onFailure(true); 
    }); 
    } 
} 

누구나 내가 잘못 본 곳을 볼 수 있습니까?

편집 : 마크 업이 문제라고 생각하지 않습니다. 테스트 용 기본 웹 페이지 만 사용하고 있습니다. 현재에는 스타일링이나 다른 요소가 없습니다.

<form id="form1" runat="server"> 
    <div>  
    <MyControls:Search ID="Search" runat="server" /> 
    </div> 
</form> 

및 사용자 정의 컨트롤

내가 이런 일을 발견 할 때마다
<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#FindLocation").click(function() { 
     myScript.findNearbyLocations(displayData, displayError); 
    }); 
    }); 
</script> 

<input type="button" id="FindLocation" value="Find Location" /> 
<div id="results"> 
</div> 
+0

마지막 줄에는 false가 아닌가? – DOK

+0

@DOK인데, 이는 그의 onFailure 메소드가 전달 된 매개 변수로 무엇을하는지에 달려 있습니다. – CaffGeek

+0

@DOK, 아니요,이 함수는 브라우저가 navigator.geolocation funcationality를 지원하는지 여부 만 결정합니다. if 문을 작성 했으므로 지원되는 것으로 알고 있지만 사용자가 위치를 사용하기 위해 액세스를 거부했을 수 있습니다. – Brandon

답변

4

사용중인 클라이언트의 getCurrentPosition에 버그가있을 수 있습니다. 그런 경우 성공 메서드가 호출 될 때 플래그를 설정하고 findStores 함수를 두 번째 호출 할 수 없도록 설정할 수 있습니다.

2

실수로 두 번 컨트롤에 이벤트를 바인딩하기 때문에, 그것의 (필요한 모든 자바 스크립트와 함께 포함).

$("#FindLocation").click(function() { 
    myScript.findNearbyLocations(displayData, displayError); 
}); 

이 발생 코드가 두 번 실행하는 경우

, 당신은 결합 된 두 개의 동일한 클릭 이벤트가되며, 작업이 두 번 발생합니다.

+0

이 코드는 document.ready 함수에 있습니다. 나는 그것이 두 번 묶여 있다고 생각하지 않는다. findNearbyLocations 호출 전에 경고를하고 첫 번째 및 후속 클릭에 대해 매번 한 번만 호출됩니다. – Brandon

2

동일한 문제가 발생하여 브라우저 버그 (Firefox 및 Safari에서 테스트 됨) 인 것 같습니다. navigator.geolocation.getCurrentPosition sometimes works sometimes doesn't 구글에서

더 질문하지만 확실한 대답 : 나는 단순히 여기에 대한 답변 제가 이미 유사한 최근의 기간 내에서 동일한 데이터를 검색했는지 확인 http://www.google.nl/search?q=geolocation.getCurrentPosition+called+twice&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

+1

+1은 버그임을 확인하기 위해 +1합니다. 부끄러움 '대답으로 가서 깃발을 그냥 지나칠거야. 감사. – Brandon

0

이런 일을, 그리고 무슨 일이 일어나고 예측 가능한 빈도; 내가 지금 일하고있는 앱에서 발견 한 것은 에러가 발생하고 잡히지 않을 때 익명의 함수 어딘가에서 이 나타나는 것입니다. 현재 일어나는 자바 스크립트 세션을 종료하기 위해이 나타나기 시작합니다. 그것은 초조하고 성가신 일입니다. 나는 을 알고 있는데 왜 일이 벌어지는 지 알지 못한다. 여기서이 일어나고있다. 아직.

하지만 이므로 모든 "그럴 수 없다"는 대답은 몹시 정확하거나 도움이되지 않습니다.

어쨌든, 그건 내 대답이다; 당신은 내부 함수가 JQuery가 조용히 먹는 것과 같은 에러를 발생시킬 수 있습니다.

$ .02

관련 문제