为什么这个javascript会被调用两次?
我有一个按钮,我将onclick连接到一个调用以检索用户位置,然后使用该位置再次调用以检索附近位置的列表。出于某种原因,第二次单击按钮时,geolocation success方法将被调用两次 因此,我加载页面,单击按钮,允许使用我的位置,它将发出一个ajax请求以获取附近的位置。这个很好用 我再次单击按钮,允许使用我的位置(再次),它将发出一个ajax请求以获取位置,等待~2秒,然后在我不允许的情况下使用相同的坐标发出另一个请求。因此,成功方法必须被调用两次,但我不知道为什么为什么这个javascript会被调用两次?,javascript,jquery,geolocation,Javascript,Jquery,Geolocation,我有一个按钮,我将onclick连接到一个调用以检索用户位置,然后使用该位置再次调用以检索附近位置的列表。出于某种原因,第二次单击按钮时,geolocation success方法将被调用两次 因此,我加载页面,单击按钮,允许使用我的位置,它将发出一个ajax请求以获取附近的位置。这个很好用 我再次单击按钮,允许使用我的位置(再次),它将发出一个ajax请求以获取位置,等待~2秒,然后在我不允许的情况下使用相同的坐标发出另一个请求。因此,成功方法必须被调用两次,但我不知道为什么 $("#Find
$("#FindLocation").click(function () {
myScript.findNearbyLocations(displayData, displayError);
});
这个click函数没有被调用两次,我已经注释掉了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)
$(文档).ready(函数(){
$(“#查找位置”)。单击(函数(){
myScript.findNearbyLocations(displayData,displayError);
});
});
每当我发现发生这种情况时,都是因为我意外地将事件绑定到控件两次
如果代码
$("#FindLocation").click(function () {
myScript.findNearbyLocations(displayData, displayError);
});
如果碰巧运行两次,您将绑定两个相同的单击事件,并且该操作将发生两次。可能是您正在使用的任何客户端的
getCurrentPosition
中的错误。
在这种情况下,您可以在调用success方法时简单地设置一个标志,并且不允许第二次调用
findStores
函数。我面临同样的问题,这似乎是一个浏览器错误(在Firefox和Safari中测试)。我只是验证了我是否已经在最近的时间段内检索到了相同的数据,类似于这里的回答:
谷歌有更多的问题,但没有明确的答案:这正在发生,而且发生的频率可以预测;我在目前正在开发的一个应用程序中发现,当出现错误且未被捕获时,在某个匿名函数中的某个地方,该函数似乎会终止当前的Javascript会话,这时错误就开始发生了。这是令人沮丧和恼人的;我知道为什么会这样,但我不知道发生在哪里。。。然而 但事实确实如此,因此,只要一个简短的评论,所有“不可能发生”的答案都不是非常准确或有用 不管怎样,这就是我的答案;您可能有一些内部函数抛出JQuery正在悄悄地处理的错误或其他错误
$.02在您的最后一行中,onFailure不应该为false吗?@DOK,这将取决于他的
onFailure
方法对传递给它的参数所做的操作。@DOK,不,该函数只考虑浏览器是否支持navigator.geolocation函数。由于我们在if语句中添加了它,我知道它是受支持的,但是用户可能拒绝访问他们的位置。您是否可能无意中在页面上添加了两个元素id='FindLocation'
?不应该允许它有一个重复的ID,但是JQuery会处理它并为每个ID运行事件。@Spudley,恐怕不行。这是一个空网页,带有基本的html/头/体标记和一个用户控件。没有其他因素。用户控件只包含一个按钮和一个用于转储结果的div。我相信它不会被捆绑两次。我在findNearbyLocations调用之前放置了一个警报,每次第一次和随后的单击都只调用一次。+1用于确认它是一个bug。我想我会同意wosis的回答,只是插一面旗子。谢谢
$("#FindLocation").click(function () {
myScript.findNearbyLocations(displayData, displayError);
});