1

我在我的网页中遇到了一个奇怪的问题。如果被调用的 javascript 函数在其中添加带有回调函数的语句,则附加到 href 的 JavaScript 会被正常调用并停止工作。在这种情况下,即使是作为从 href 调用的 JS func 中的第一条语句放置的警报也不会触发。

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

单击此链接时

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

以下 js func 被调用得很好,我看到两条警报消息都表明 getMyPosition() 已执行。注意:此时(即当 js 看似工作时)回调函数(“handleposition”)尚未定义,但不会引发任何错误!本身就很奇怪:)

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 事件上定义的函数。

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

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 位机器上。

4

3 回答 3

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;
于 2014-01-02T20:26:57.153 回答
1

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

添加错误处理程序似乎可以解决问题,但在此过程中我清理了其他一些东西。这是一个显示它工作的小提琴

以下是我如何编写链接以在所有浏览器中工作:

<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);
}
于 2014-01-02T21:01:32.497 回答
0

放在return false;getMyPosition函数的最后

于 2014-01-02T20:22:38.430 回答