在页面加载时从隐藏字段中获取 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 函数执行并将地理数据加载到您的 &lt;inputs&gt; 元素中。然后,什么也没有发生。客户端就坐在那里,服务器也坐在那里。当您可以获取值时,客户端必须执行操作(例如单击按钮)将代码发送回您的服务器。 ^ 那条评论让这一切变得更加清晰。我通过添加一个按钮来修复它,然后将数据提交到服务器,在那里我捕获它并渲染地图。非常感谢!

以上是关于在页面加载时从隐藏字段中获取 JS 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 useEffect 在页面加载时从上下文中获取数据

页面加载时如何运行js获取数据?

如何在页面加载时隐藏所有表单字段并在从下拉列表中选择时启用

Nuxt.js 本地站点页面仅在登陆时从 Strapi 加载数据,而不是通过 <nuxt-link> 导航

ajax获取的数据,怎么存储在页面

在页面加载完成后js获取table的高度不正确,刷新后获取的高度就正确了,求原因及解决方法。