我试图在Rails 3中为表单中的隐藏字段设置一个值。
但是当我将表单提交到我的数据库时,没有为这些字段编写任何内容。
有我的JS:
function getGeocode() {
geocoder = new google.maps.Geocoder();
var street = $("#player_street").val()
var postalcode = $("#player_postalcode").val()
var city = $("#player_city").val()
var address = street + ", " + postalcode + ", " + city
var lat
var lng
//console.log(address)
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.hb
lng = results[0].geometry.location.ib
$("#player_lat").val(lat)
$("#player_lng").val(lng)
return true
} else {
return false
alert("Dein Player konnte nicht eingetragen werden, bitte probiere es noch einmal.");
}
})
}
当我将getGeocode()的returnvalue变为false时,隐藏字段的值会被设置。但是当我将returnvalue设置为true时,没有数据库的条目。
字段已设置并在模型中工作,函数由form_for帮助程序的onsubmit方法访问。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
由于您使用jQuery使用:hidden
jQuery选择器。
var street = $("#player_street:hidden").val()
答案 1 :(得分:0)
geocoder.geocode( ...
是异步功能。因此,它会在一段时间后收到响应并为字段设置值,而getGeocode()
函数的其余代码将继续运行。
如果在函数中返回true
,则在地理编码器返回结果之前提交表单。如果您返回false
,则会取消提交并设置值。
所以你需要在回调中提交数据,例如:
$(#the_form_id).submit( function() {
geocoder = new google.maps.Geocoder();
var street = $("#player_street").val()
var postalcode = $("#player_postalcode").val()
var city = $("#player_city").val()
var address = street + ", " + postalcode + ", " + city
var lat
var lng
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.hb
lng = results[0].geometry.location.ib
$("#player_lat").val(lat)
$("#player_lng").val(lng)
$(#the_form_id).unbind('submit').submit();
} else {
return false
alert("Dein Player konnte nicht eingetragen werden, bitte probiere es noch einmal.");
}
});
return false;
})
答案 2 :(得分:0)
为防止提交方法,我添加了ev.preventDefault()并在使用$(“#new_player”)设置值后恢复了方法.unbind('submit')。submit()
$("#new_player").submit( function(ev) {
ev.preventDefault();
geocoder = new google.maps.Geocoder();
var street = $("#player_street").val()
var postalcode = $("#player_postalcode").val()
var city = $("#player_city").val()
var address = street + ", " + postalcode + ", " + city
var lat
var lng
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.hb
lng = results[0].geometry.location.ib
$("#player_lat:hidden").val(lat)
$("#player_lng:hidden").val(lng)
$("#new_player").unbind('submit').submit()
} else {
alert("Dein Player konnte nicht eingetragen werden, bitte probiere es noch einmal.")
return false
}
})
})