【发布时间】:2018-09-11 14:55:49
【问题描述】:
我正在尝试提交一个位置的输入字段,通过谷歌地理编码器查找纬度和经度,将它们放在一些隐藏字段中,然后作为表单发布。
有两个主要障碍,第一个是我的 validateFields 函数看不到添加到隐藏文本框中的值,第二个是延迟提交表单以添加 long 和 lat 作为发帖。
我知道可以让提交事件返回 true 或 false 以根据 validateField 检查延迟提交,但即使使用 Chrome 开发工具我看到它们已添加,它似乎也永远看不到坐标。
$('#LocationSearchForm').submit(event => {
let input = $('#SearchTerm').val();
$('#Longitude'.val('23423'));
$('#Latitude'.val('1111'));
getLatLong().then(allowSubmit);
});
function getLatLong(input) {
return new Promise(resolve => {
let geocoder = new google.maps.Geocoder();
geocoder.geocode({ address: input }, (results, status) => {
if (status == google.maps.GeocoderStatus.OK) {
$('#Latitude').val(results[0].geometry.location.lat());
$('#Longitude').val(results[0].geometry.location.lng());
}
});
resolve(console.log(`applied coordinates to hidden fields`));
});
}
function validateFields() {
if ($('#Latitude').val() === '' && $('#Longitude').val() === '') {
return false;
}
return true;
}
function allowSubmit() {
return validateFields();
}
HTML
<form id="LocationSearchForm" action="POST">
<input id="SearchTerm" type="text" placeholder="Find a city" value>
<input id="Latitude" type="hidden" value>
<input id="Longitude" type="hidden" value>
</form>
【问题讨论】:
-
您需要从事件处理程序本身返回 true 或 false。
allowSubmit函数返回什么并不重要。您需要始终阻止表单在该事件上提交,然后验证,然后在可以提交表单时提交。
标签: javascript jquery asynchronous post promise