在页面加载时从隐藏字段中获取 JS 值
Posted
技术标签:
【中文标题】在页面加载时从隐藏字段中获取 JS 值【英文标题】:Grabbing JS values from hidden fields on page load 【发布时间】:2011-12-13 00:28:13 【问题描述】:我正在尝试在 .NET 中为一个 uni 项目实现一些 Google 地图。
但是,我很难将我的坐标获取到我的 .NET Google 地图控件。
我认为最简单的方法是使用 html5 地理定位 API 来获取当前位置的坐标,然后在我的 .NET 代码中获取这些坐标并使用它们使地图居中。
我有以下JS代码:
$(document).ready(function ()
if (Modernizr.geolocation)
navigator.geolocation.getCurrentPosition(getCoords);
else
// no support
function getCoords(position)
$("#lat").val(position.coords.latitude);
$("#long").val(position.coords.longitude);
);
这会将纬度和经度的坐标放在各自隐藏的文本框中,#lat
和 #long
。
现在,我想在我的代码隐藏 .NET 代码中获取它们。我正在尝试这样做:
protected void Page_Load(object sender, EventArgs e)
if (!Page.IsPostBack)
// some other code
// maps
addStoreMap.enableDragging = false;
addStoreMap.enableGoogleBar = false;
// grab the coordinates here.
decimal lat = Convert.ToDecimal(hdnLat.Value);
decimal lng = Convert.ToDecimal(hdnLong.Value);
但是,这总是返回一个空值。我似乎无法将坐标值加载到我的 .NET 代码中。不过,当我通过 JS 提醒他们时,我会得到这些值。这是因为 Page_Load 事件发生在我的 JS 执行之前吗?如果是这样,我将如何解决这个问题?
谢谢
【问题讨论】:
【参考方案1】:document
上的 ready
事件没有 .preventDefault()
,因此该行会引发错误。它从未进入geolocation
代码。删除该行:
e.preventDefault();
演示:http://jsfiddle.net/ThinkingStiff/mGj2W/
HTML:
<input id="lat" type="hidden" /><input id="long" type="hidden" />
<div id="result"></div>
脚本:
$( document ).ready( function ()
if ( true ) //modernizr check here
navigator.geolocation.getCurrentPosition( getCoords );
else
// no support
function getCoords( position )
$( '#lat' ).val( position.coords.latitude );
$( '#long' ).val( position.coords.longitude );
$( '#result' ).text( $( '#lat' ).val() + ', ' + $( '#long' ).val() );
);
输出:
39.583129, -124.4872483
【讨论】:
PreventDefault 是我在尝试使用按钮上的单击事件时意外留下的一些代码。对于那个很抱歉。我设法做你正在做的事情;但是,ASP.NET 部分在这里产生了问题。我似乎无法将我的 JS 值添加到我的 .NET 代码中,因为 Page_Load 事件似乎在 JS 完成加载坐标之前被调用,因此总是返回一个空值。Page_Load
在服务器上完成,document.ready
在客户端上完成。他们真的没有任何关系。您必须加载您的页面,然后将其发布回服务器。是什么触发了回帖?
我没有向服务器发布任何内容。我只是从我的 .NET 代码中的隐藏字段中获取值。目前对此感到非常困惑..因为如果他们彼此没有任何关系,为什么它不能在.NET代码中给我正确的值? :(我会睡在上面,明天再考虑一下。谢谢你的时间!
当浏览器请求您的页面时,它会转到服务器,运行您的 .NET Page_Load
函数,然后将结果发送回客户端浏览器。然后你的服务器在等待时什么也不做。在客户端,在用户浏览器中,加载 HTML 并解析 javascript。您的 document.ready
函数执行并将地理数据加载到您的 <inputs>
元素中。然后,什么也没有发生。客户端就坐在那里,服务器也坐在那里。当您可以获取值时,客户端必须执行操作(例如单击按钮)将代码发送回您的服务器。
^ 那条评论让这一切变得更加清晰。我通过添加一个按钮来修复它,然后将数据提交到服务器,在那里我捕获它并渲染地图。非常感谢!以上是关于在页面加载时从隐藏字段中获取 JS 值的主要内容,如果未能解决你的问题,请参考以下文章