可以't为表单中的隐藏字段设置值
Can't set value for hidden field in form
我正试图在Rails3中为表单中的隐藏字段设置一个值。
但是,当我将表格提交到数据库时,没有为这些字段编写任何内容。
这里有我的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方法访问。
有人知道怎么解决这个问题吗?
由于使用jQuery使用:hidden
jQuery选择器。
var street = $("#player_street:hidden").val()
http://api.jquery.com/hidden-selector/
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;
})
为了防止该方法提交,我添加了ev.prventDefault(),并在用$("#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
}
})
})
相关文章:
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 带有验证和隐藏字段值的提交按钮
- 主干窗体隐藏字段未呈现
- 清除以前的$_GET值或不获取仅隐藏字段的值
- 添加和删除隐藏字段数组中的值,而不提交表单
- 在控制器上使用“$watch”时,为什么不更新此隐藏字段
- 将选项值附加到隐藏字段
- JQuery获取隐藏字段的值
- MVC+访问控制器中的隐藏字段
- ASP.net Javascript函数中的隐藏字段为null
- 在第一页加载时隐藏字段,而不是在php发布之后
- 表单使用js、html,而不是隐藏字段
- 如何根据文本长度立即显示和隐藏字段?-JQuery
- 在选择更改时显示大于/小于的隐藏字段集
- 如何获取多个复选框值并分配给隐藏字段
- 将会话登录页存储在cookie中以进行表单解析(通过隐藏字段)
- 将布尔值存储在隐藏字段中以进行表单处理
- 如何将多个/不同的隐藏字段插入 XML
- 如何通过 JSP 代码将隐藏字段(Javascript)插入 XML
- 如何使用Java在Selenium WebDriver的隐藏字段中键入一些文本