jQuery在修改后不提交表单

时间:2016-05-24 13:12:57

标签: jquery

我有以下HTML表单:

<form action="../start_timer" class="start_timer" id="447" method="post" accept-charset="utf-8">
<input type="hidden" name="shift_id" value="447">
<input type="hidden" name="latitude" class="latitude">
<input type="hidden" name="longitude" class="longitude">
<input type="submit" value="Start">
</form>

和以下jQuery来处理表单submition:

$(document).ready(function() {
        $( "form.start_timer, .form.end_timer" ).submit(function(e) {   
            if( $(this).children( ".latitude" ).val().length === 0 || $(this).children( ".longitude" ).val().length === 0 ){
                e.preventDefault();
                navigator.geolocation.getCurrentPosition(foundLocation, noLocation,{timeout:10000});
                submits=0;
                $( ".longitude" ).change(function(e) {
                    if (submits==0) {
                    $(this).submit();
                    }
                    submits++;
                });
            }else if( $(this).children( ".latitude" ).val().length !== 0 && $(this).children( ".longitude" ).val().length !== 0 ){

                return true;

            }
        });
    });

这是填充隐藏字段的foundLocation函数:

function foundLocation( position ){ 

        var lat = position.coords.latitude;
        var long = position.coords.longitude;

        if ($( ".latitude" ).val( lat )!="lat") {
        $( ".latitude" ).val( lat ).trigger('change');
        }

        if ($( ".longitude" ).val( long )!="long") {
        $( ".longitude" ).val( long ).trigger('change');        
        }
}

它会在else if案例中停止,并且不会真正提交表单。

如何在修改后实际提交?

非常感谢任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

问题是getCurrentPosition函数是异步的,所以你在函数返回值之前触发表单提交,表单提交应该是这样的:

entityB.Include(p => p.Cs.Select(pr => pr.EntityB)) 

答案 1 :(得分:0)

您的foundLocation函数错误,您的事件附件也是错误的。

你的foundLocation应该是:

function foundLocation( position ){ 

    var lat = position.coords.latitude;
    var long = position.coords.longitude;

    $( ".latitude" ).val( lat );
    $( ".longitude" ).val( long ).trigger('change');        

}

并尝试附加提交事件,如下所示:

$(document).ready(function() {
    $( "form.start_timer, .form.end_timer" ).submit(function(e) {   
        var dat = $(this);
        if( $(this).children( ".latitude" ).val().length === 0 || $(this).children( ".longitude" ).val().length === 0 ){
            e.preventDefault();
            dat.on('change', '.longitude, .latitude', function(e) {
                if(dat.find('.latitude').val() != "" && dat.find('.longitude').val() != "") dat.submit();
            });
            navigator.geolocation.getCurrentPosition(foundLocation, noLocation,{timeout:10000});

        }
    });
});