添加回调函数时,JavaScript停止工作

时间:2014-01-02 20:19:53

标签: javascript html w3c-geolocation

我的网页遇到了一个奇怪的问题。连接到href的JavaScript被调用得很好,如果被调用的javascript函数在其中添加带回调函数的语句,则停止工作。在这种情况下,即使是从href中调用的JS函数中的第一个语句也不会发出警报。

这是一个例子: 以下工作正常。

点击此链接

<a href = "#" onclick="getMyPosition(); return false;">refresh</a>,

跟随js func被调用就好了,我看到两个警告消息,表明执行了getMyPosition()。注意:此时(即当js看起来正常工作时)回调函数(“handleposition”)是 NOT 定义但它不会引发任何错误!奇怪的是:)

function getMyPosition() { 
  alert("it worked 1.");
  if ( navigator.geolocation )
  {
    alert("it worked 2.");
    navigator.geolocation.getCurrentPosition(handlePosition, handleError, {
    enabledHighAccuracy: true,
    maximumAge: 60000,
    timeout:    30000
    });
  }
}

现在,如果我在脚本块中添加以下功能,则所有功能都停止工作,甚至可以看到刷新链接。由于网页上的其他内容(包含附加到其他项目的JavaScript事件等)保持正常工作,我的假设是页面上的JavaSctipt工作正常。只是这个链接停止调用onClick事件上定义的func。

添加以下回调函数会导致行为,就好像没有点击“刷新”链接一样:

function handlePosition(pos)
{
  alert(pos.coords.latitude);
  alert(pos.coords.longitude);
  window.location.href = "/map?js=y&amp;lat=pos.coords.latitude&amp;lon=pos.coords.longitude";
}

现在如果删除此功能,上面显示的href链接将再次开始工作,getMyPosition将被调用,我再次看到警报消息! 我没有在页面上看到任何脚本错误 IE 11和Chrome都表现出这种行为。 我在Windows 7 32位机器上。

3 个答案:

答案 0 :(得分:1)

window.location.href = "/map?js=y&amp;lat=pos.coords.latitude&amp;lon=pos.coords.longitude";

应该是:

window.location.href = "/map?js=y&lat=" + pos.coords.latitude + "&lon=" + pos.coords.longitude;

答案 1 :(得分:1)

可能最大的问题是地理定位回调缺少错误处理程序。通过F12启动Chrome调试器很快就发现了问题。

添加错误处理程序似乎解决了问题,但在那里我清理了一些其他的东西。 Here's a fiddle showing it working

以下是我将链接编码为在所有浏览器中运行的方式:

<a href="#" onclick="return(getMyPosition())">refresh</a>

这是修改后的句柄位置JS代码和新的handleError例程。

注意添加到主函数中的“return false”:

function getMyPosition() {
    alert("it worked 1.");
    if (navigator.geolocation) {
        alert("it worked 2.");
        navigator.geolocation.getCurrentPosition(handlePosition, handleError, {
            enabledHighAccuracy: true,
            maximumAge: 60000,
            timeout: 30000
        });
    }
    return false;
}

function handlePosition(pos) {
    alert(pos.coords.latitude);
    alert(pos.coords.longitude);
    window.location.href = "/map?js=y&amp;lat=" + pos.coords.latitude + "&amp;lon=" + pos.coords.longitude;
}

function handleError(error) {
    alert(error);
}

答案 2 :(得分:0)

return false;放入getMyPosition函数的末尾