【发布时间】:2011-06-05 08:53:15
【问题描述】:
我有一个按钮,我将 onclick 连接到调用以检索用户位置,然后使用该位置进行另一个调用以检索附近位置的列表。由于某种原因,在第二次单击按钮时会调用两次地理定位成功方法。
所以我加载页面,单击按钮,允许使用我的位置,它会发出一个 ajax 请求来获取附近的位置。这很好用。
我再次单击该按钮,允许使用我的位置(再次),它将发出一个 ajax 请求来获取位置,等待约 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>
和用户控件(以及所有必要的 javascript 包括)
<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>
【问题讨论】:
-
不应该在最后一行的 onFailure 为 false 吗?
-
@DOK,这取决于他的
onFailure方法对传递给它的参数做了什么。 -
@DOK,不,该功能只接受浏览器是否支持 navigator.geolocation 功能。由于我们将其放入 if 语句中,我知道它是受支持的,但用户可能拒绝使用他们的位置。
-
您会不会无意中在页面上有两个带有
id='FindLocation'的元素?它不应该被允许有一个重复的 ID,但是 JQuery 会处理它并且会为它们中的每一个运行事件。 -
@Spudley,不用担心。这是一个带有基本 html/head/body 标签和用户控件的空网页。没有其他元素。用户控件只包含一个按钮和一个用于转储结果的 div。
标签: javascript jquery geolocation