我在表单中有一个隐藏字段,我使用Drupal的表单API创建,如下所示:
$form['position'] = array(
'#type' => 'hidden',
'#default_value' => '57.149953,-2.104053',
'#attributes' => array(
'id' => 'geoposition',
)
);
当我加载呈现表单的页面时,我有一些JavaScript编辑隐藏字段,如下所示:
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(getPosition, noPosition, 10);
}
function getPosition(position) {
var pos = document.getElementsByName("position");
pos.value = position.coords.latitude + "," + position.coords.longitude;
alert(pos.value);
}
现在,此代码段中的最后一个语句实际上输出了用户当前位置的正确值。但是,当我提交表单时,传递给服务器进行操作的值是默认值,而不是更新的值。提交表单后使用的值如下所示:
$map_field .= 'src="http://maps.google.co.uk/maps?q='.$form_state['values']['position'].'&output=embed"></iframe>';
有什么想法吗?
谢谢,
答案 0 :(得分:0)
这就是我所做的:
1)暂时禁用js。 2)使用xdebug查看表单提交之前和之后的值。这应该有助于查看是否出现问题。
干杯, 维沙尔
答案 1 :(得分:0)
不要使用#default_value,而应考虑使用#value - 因为这是发布的值。
答案 2 :(得分:0)
最终通过使用getElementById()方法而不是getElementsByName()方法解决了它。由于某种原因,该名称不起作用。谢谢大家的帮助。