JavaScript / jQuery - 如何使用js处理表单然后在没有ajax的情况下提交它?

时间:2011-11-21 20:23:12

标签: javascript jquery infinite-loop

我正在使用Python / Django编写一个网站,目前我正在通过geopy模块进行服务器端地理编码。我想实现逐步增强通过Javascript进行地理编码(以确保我没有达到Google的地理编码请求/用户的每日限制),然后将Javascript地理编码的结果传递给服务器以进行进一步处理。

我目前正在做的是使用javascript和Google地理编码API来获取(lat,lon)坐标,并将它们作为隐藏输入添加到我的表单中。但是,我不知道如何使用(lat,lon)提交此表单而不会遇到无限循环。我宁愿远离发送这个通过Ajax,因为对于这个特定的页面,99.9%的页面需要刷新,我想尽可能简化设计,所以Ajax会有点过分。

我把event.preventDefault()放到if语句中测试是否存在隐藏的lat / lon变量,但是无法使它工作。

有什么想法吗?提前致谢!瓦西里

$(document).ready(function() {

var g = new GoogleGeocode();  

//bind event handler
$('#address_form').bind('submit', function(event){

    //get address from form
    var address = $('#id_address').val();

    event.preventDefault();

    //get lat/lon
    g.geocode(address, function(data) {  
        if(data != null) {  
            alert(data.longitude + " " + data.latitude);  
            //insert lat and lon into the form
            $('<input type="hidden" id="lat" name="lat" value="' + data.latitude + '"/>').appendTo('form');
            $('<input type="hidden" id="lon" name="lon" value="' + data.longitude + '"/>').appendTo('form');
        } else {  
            alert('ERROR! Unable to geocode address');  
        }
    });  
});
});

3 个答案:

答案 0 :(得分:0)

一旦确定必须提交表单,就应该unbind表单submit事件处理程序。试试这个

$(document).ready(function() {

var g = new GoogleGeocode();  

//bind event handler
$('#address_form').bind('submit', function(event){

    //get address from form
    var address = $('#id_address').val();

    event.preventDefault();

    //get lat/lon
    g.geocode(address, function(data) {  
        if(data != null) {  
            alert(data.longitude + " " + data.latitude);  
            //insert lat and lon into the form
            $('<input type="hidden" id="lat" name="lat" value="' + data.latitude + '"/>').appendTo('form');
            $('<input type="hidden" id="lon" name="lon" value="' + data.longitude + '"/>').appendTo('form');

             $('#address_form').unbind('submit').submit();

        } else {  
            alert('ERROR! Unable to geocode address');  
        }
    });  
});

});

答案 1 :(得分:0)

submit处理程序中,检查您是否已对其进行了地理编码,如果是,则return。 (不是false) 如果您在做任何事情之前返回,浏览器将正常提交。

或者,只需在地理编码后取消绑定处理程序。

答案 2 :(得分:0)

尝试在函数结束时返回false