0

我正在尝试在 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() 的返回值设置为 false 时,隐藏字段的值被设置。但是当我将返回值设置为 true 时,数据库中没有条目。

字段在模型中设置和工作,并且通过 form_for 助手的 onsubmit 方法访问该函数。

有谁知道如何解决这个问题?

4

3 回答 3

0

由于您使用 jQuery 使用:hiddenjQuery 选择器。

var street = $("#player_street:hidden").val()

http://api.jquery.com/hidden-selector/

于 2013-02-22T16:45:03.463 回答
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;
})
于 2013-02-22T16:49:02.067 回答
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
      }
    })
})
于 2013-02-28T17:12:41.480 回答