geoLocation拒绝后jQuery preventDefault(并返回false)在Safari中无效

时间:2016-06-29 18:59:24

标签: jquery safari geolocation preventdefault

我有一些geoLocation代码可以在任何情况下工作但只有一个,如果用户有Safari并选择否。我在OSX 10.10中使用Safari 9.1(因此它不是Windows中的Safari 5问题)。

输入字段预先填充了来自后端的数据,但如果我们可以从浏览器更新地理位置数据,我们就会这样做。

当我在Safari中选择“是”时,它会抓取并添加正确的数据。在我选择“否”之后,它只是忽略了所有内容并执行了默认操作,要么使用默认数据提交表单,要么在不添加任何参数的情况下跟踪链接,并且警报不会发出警报。由于使链接工作的功能被注释掉了,链接甚至不能正常工作(并且它立即发生,因此setTimeout功能不是问题)。

我刚刚e.preventDefault,它可以在其他任何地方使用。 StackOverflow提供了stopPropagationreturn false的建议,两者都没有帮助。

这是HTML(加上一些JSP)

<div id="search">
    <form action="/redir/xtsearch" method="get">
        <input id="q" type="text" autocomplete="off" name="search_term" value="" placeholder="Search">
        <button id="search-submit" class="get-geo-location-lat-lng" type="submit">GO</button>
        <input type="hidden" name="esn" value="<c:out value='${plugin_subscriber.result.esn}' />">
        <input type="hidden" name="m" value="<c:out value='${plugin_subscriber.result.mdn}' />">
        <input type="hidden" name="zip" value="<c:out value='${plugin_subscriberlocation.result.postalCode}' />">
        <input type="hidden" name="lat" value="<c:out value='${plugin_subscriberlocation.result.lat}' />">
        <input type="hidden" name="lng" value="<c:out value='${plugin_subscriberlocation.result.long}' />">
    </form>
</div>
<nav id="local">
    <ul>
        <li><c:choose><c:when test="${pageContext.request.contextPath == '/index'}"><a href="/retailers">Retailers</a></c:when> <c:otherwise> <a href="/appsandgames">Free Games</a> </c:otherwise></c:choose></li>
         <li><a href="/traffic">Maps</a></li>
        <li><a href="local" class="get-geo-location-lat-lng">Local search</a></li>
    </ul>
</nav>

和JavaScript

$('.get-geo-location-lat-lng').on('click',function(e){
    e.preventDefault();
    e.stopPropagation();
    var this_link = $(this), 
        this_href = $(this).attr('href'),
        geoOptions = {
            enableHighAccuracy: false,
            timeout: 5000, // Wait 5 seconds
            maximumAge: 300000 //  Valid for 5 minutes
        },
        ESN = $('[name="esn"]').val(),
        MDN = $('[name="m"]').val();
    function gotCoords(lat,lng) {
        if (this_link.is("button")) {
            $('[name="lat"]').val(lat);
            $('[name="lng"]').val(lng);
            $('#search form').submit();
        } else {
            //get variables from velocity injected code on the page
            window.location = this_href + '?brand=TF2&esn=' + ESN + '&m=' + MDN + '&lat=' + lat + '&lng=' + lng;
        }
    }
    function noBrowserGeoLoc(){
        if (this_link.is("button")) {
            $('#search form').submit();
        } else {
            var lat = $('[name="lat"]').val(),lng = $('[name="lng"]').val();
            window.location = this_href + '?brand=TF2&esn=' + ESN + '&m=' + MDN + '&lat=' + lat + '&lng=' + lng;
        }
    }
    try {
        if ('geolocation' in navigator) {
            navigator.geolocation.getCurrentPosition(success, error, geoOptions);
            function success(pos) {
                var lat = pos.coords.latitude, lng = pos.coords.longitude;
                alert('Success');
                //gotCoords(lat,lng);
            }
            function error()  {
                alert('Failure');
                //noBrowserGeoLoc();
            }
        }
        setTimeout(noBrowserGeoLoc,6000); //Workaround for FireFox bug
    } catch(err) {
        alert('different fail');
        //noBrowserGeoLoc();
    }
    return false;
});

0 个答案:

没有答案