我使用before submit钩子以便在提交之前运行一些javascript。因此,我使用以下代码:
jQuery(function() {
jQuery('#setup-form').submit(function(e) {
codeAddress();
return true;
});
});
函数codeAddress()
用数据填充两个隐藏的输入字段。实际上填充了数据(进入值属性)。但是在服务器端没有数据到达。这有什么问题?
供参考:
function codeAddress() {
var address = document.getElementById('address').value;
if(address){
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
var location2 = '' + location;
location2 = location2.slice(1, location2.length - 1).split(', ');
jQuery('#geo-lat').attr('value', location2[0]);
jQuery('#geo-long').attr('value', location2[1]);
map.setCenter(location);
var marker = new google.maps.Marker({
map: map,
position: location
});
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
}
答案 0 :(得分:1)
我认为问题是在隐藏字段中设置值之前提交表单。您可以做的是将您的功能代码放在提交块中,并在设置隐藏字段后返回true,这样您的隐藏字段将在提交之前设置。
试试这个
jQuery(function() {
jQuery('#setup-form').submit(function(e) {
var address = document.getElementById('address').value;
var isHiddenFieldSet=0;//0 indicates hidden field value is not set
if(address){
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
var location2 = '' + location;
location2 = location2.slice(1, location2.length - 1).split(', ');
jQuery('#geo-lat').attr('value', location2[0]);
jQuery('#geo-long').attr('value', location2[1]);
map.setCenter(location);
var marker = new google.maps.Marker({
map: map,
position: location
});
isHiddenFieldSet=1;//Set value to 1 to indicate hidden field value is set
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
if(isHiddenFieldSet){//Submit the form only if hidden field value is set
return true;
} else {
return false;
}
});
});
答案 1 :(得分:0)
首先调用您的codeAddress函数,然后从该函数内部调用您的提交后设置值。 像这样
function codeAddress() {
var address = document.getElementById('address').value;
if(address){
.
.
.
jQuery('#geo-lat').attr('value', location2[0]);
jQuery('#geo-long').attr('value', location2[1]);
jQuery('#setup-form').submit();
...
}
答案 2 :(得分:0)
由于Ravi Thakkar和mry的答案不起作用(我评论了原因)我建议我自己的解决方案,但这是基于你的想法:
function codeAddress(submit) {
var address = document.getElementById('address').value;
if(address){
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
var location2 = '' + location;
location2 = location2.slice(1, location2.length - 1).split(', ');
jQuery('#geo-lat').attr('value', location2[0]);
jQuery('#geo-long').attr('value', location2[1]);
map.setCenter(location);
var marker = new google.maps.Marker({
map: map,
position: location
});
if(submit) jQuery('#setup-form').submit();
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
} else {
if(submit) jQuery('#setup-form').submit();
}
}
因此,将html中的提交按钮更改为:
是必要的<button type="button" class="btn btn-success btn-lg" onclick="codeAddress(true)">Submit</button>