在asp.net aspx页面上使用jquery获取隐藏字段值时遇到问题

时间:2015-06-24 17:54:11

标签: javascript jquery html asp.net twitter-bootstrap

我的aspx页面上有一个隐藏字段,我想用它来存储当前所选选项卡的href值(使用引导选项卡)。其中一个选项卡具有一些搜索功能,当从搜索发生回发时,页面会加载默认的活动选项卡。我已经尝试为此找到许多解决方案,但似乎都没有效果。 This解决方案看起来很有希望,但隐藏字段不在Request.Form中。

所以,我开始搞乱我自己的解决方案,当点击标签时,将隐藏字段的值设置为点击标签的href属性,单击按钮时,将值存储在会话中。我的问题是:我不能为我的生活找到一种获取/设置隐藏字段值的方法。在阅读了人们在堆栈中遇到的许多类似问题之后,我开始怀疑我是否在尝试获取/设置值时不在DOM中。

我知道我擅长第一次使用$(document).ready()但是我不确定在我有点击事件时会发生什么,例如$(myTab a).click()。在这个事件中,我是否有可能尝试获取不再存在于DOM中的元素?我尝试了许多不同的方法,并且在尝试执行此操作时仍然保持null或undefined。为了结束这个咆哮/问题,我将以我尝试过的所有不同方式发布我的代码。

<div id="maintabs" runat="server">
    <ul class="nav nav-tabs" id="myTab">
        <li class="active"><a href="#home" data-toggle="tab">Main</a></li>
        <li><a href="#Activity" data-toggle="tab">System Notes</a></li>
        <li><a href="#Guidelines" data-toggle="tab"><%= SBL.GetConsiderations(CompanyID) %></a></li>
        <li><a href="#Steps" data-toggle="tab">System Steps</a></li>
        <li><a href="#Accepted" data-toggle="tab">Employees Accepted</a></li>
        <li><a href="#Files" data-toggle="tab">Locate A File</a></li>
    </ul>
<div class="tab-content">
.
.
.
<div class="hidWrapper">
    <asp:HiddenField ID="hidLastTab" Value="0" runat="server" />
</div>

<script type="text/javascript">
    $(document).ready(function() {
        $("#myTab a").click(function() {
            // This is basically what I'm trying to accomplish
            $("#hidLastTab").val($(this).attr("href").replace("#", ""));

            // So first test... 
            console.log($(this).attr("href").replace("#", ""))  // Console logged Files as expected, so this is good

            // My next test was then this
            console.log($("#hidLastTab").val());  // Console logged undefined

            // Next attempts
            console.log($("#hidLastTab").value);  // still undefined

            var myHidden = document.getElementById('<%= hidLastTab.ClientID %>');
            console.log(myHidden.value);  // Cannot read property 'value' of null

            var myHidden = document.getElementById('<%= hidLastTab.ClientID %>')
            console.log(document.getElementById(myHidden));  // null
            console.log(document.getElementById(myHidden).value);  // Cannot read property 'value' of null

            var myHidden = '<%= hidLastTab.ClientID %>';  // ctl00_ContentPlaceHolder1_hidLastTab
            console.log(myHidden);  // null
            console.log(document.getElementById(myHidden));  // Cannot read property 'value' of null
            console.log(document.getElementById(myHidden).value); // Cannot read property 'val' of null

            // per one recommendation, a div wrapper
            console.log($(".hidWrapper input[type=hidden]").val());  // undefined

            // Another recommendation
            console.log($("[id$=_hidLastTab").attr['value']); // undefined
        })
    })
<script>

如果有人能在这里帮助我,那真是太棒了,因为这让我发疯了!我甚至尝试用文本框做同样的事情,因为至少我知道我应该能够getElementById(我真的不知道隐藏的字段是如何工作的,因为我在标记中找不到它,我不是' t 100%肯定getElementById会像其他元素一样工作),甚至文本框在执行getElementById(“txtNotes”)和getElementById('&lt;%= txtNotes.ClientID%&gt;')时返回null。这就是让我相信这可能是当时DOM不存在的元素的问题。

非常感谢! 安迪

4 个答案:

答案 0 :(得分:1)

应该$(myTab a).click(function()是$(“#myTab a”)。click(function()?我用Jquery 1.11.3尝试了你的解决方案,它按预期工作。如果启动检查器在谷歌浏览器中,您可以看到点击事件永远不会绑定到那些元素,因为JQuery找不到$(myTab a)。

答案 1 :(得分:1)

我会尝试将value =“0”更改为Value =“”。 你的Jquery看起来应该是

var builder = new ContainerBuilder();
builder.RegisterType<Fake1>().As<IFake>();
builder.RegisterGeneric(typeof(List<>)); 

var scope = builder.Build(ContainerBuildOptions.ExcludeDefaultModules);

var list = scope.Resolve<List<IFake>>();
Console.WriteLine(list.Count); // => prints 0!

另请查看https://stackoverflow.com/a/8965804/4581384

答案 2 :(得分:1)

你也可以这样解决它

$('.hidWrapper input[type=hidden]').val()

答案 3 :(得分:1)

好的,所以我让这个工作,但我不能100%确定问题是什么。感谢所有回答的人,特别感谢johnny 5要求我的标记,因为这让我有点思考。

基本上,我移动了隐藏字段,使其与触发点击的标记位于同一个div中。我不确定它是否需要,但我的想法是,根据点击的标签,可能由于引导程序显示和隐藏数据而无法访问某些元素。将HiddenField移动到同一个div似乎有效,但正如我所说,我不确定它是否一定需要在那里。

移动后,以下jquery允许我更改值,console.log确认它有效。再次感谢所有回答的人!

$(document).ready(function() {
    $("#myTab a").click(function () {
        document.getElementById('<%= hidLastTab.ClientID %>').value = $(this).attr("href").replace("#", "");
        console.log(document.getElementById('<%= hidLastTab.ClientID %>').value);
    })
})