【问题标题】:Having trouble getting hidden field value with jquery on asp.net aspx page在 asp.net aspx 页面上使用 jquery 获取隐藏字段值时遇到问题
【发布时间】:2015-09-11 01:44:30
【问题描述】:

我的 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") AND getElementById('') 时文本框也会返回 null。这就是让我相信这可能是当时 DOM 不存在的元素的问题。

提前非常感谢! 安迪

【问题讨论】:

  • 您的所有代码都在您页面上的此标记内吗? &lt;asp:Content&gt; 我假设您正在使用母版页。
  • 是的,我正在使用母版页,从 getElementById 返回 null 的元素都在 标签内。

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


【解决方案1】:

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

【讨论】:

  • 是的,这实际上只是一个错字,在我的解决方案中,正如你提到的 $("myTab a"),我确信事件会触发,因为我在安慰。我也在使用 jquery 1.11.3,很奇怪它对你有用。你介意发布你有什么工作,而不是我上面列出的所有试验和失败吗?谢谢
  • 对不起,我在另一个项目中使用 1.11.3。这是使用 1.9.1。你认为这可能是问题所在吗?谢谢
  • 使用 1.9.1 也很好,为了隔离问题,我建议你删除引导 javascript 并只保留 JQuery 看看它是否有区别,我认为你做了什么 ($(" #hidLastTab").val($(this).attr("href").replace("#", ""));) 是正确的。
【解决方案2】:

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

document.getElementById('<%=hidLastTab.ClientID%>').value = "";

也可以看看这里https://stackoverflow.com/a/8965804/4581384

【讨论】:

  • 谢谢,但这并没有做到。我认为这与 val(), value, Value 无关,因为我从 document.getElementById(); 中返回 null;
  • 再次感谢,但我仍然认为这不一定有帮助。我的问题是更改隐藏值的值,即一旦发生更改就会尝试触发事件。
【解决方案3】:

你也可以这样处理它

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

【讨论】:

  • 这是我尝试过的方法之一,console.log($(".hidWrapper input[type=hidden]").val());给了我未定义的
  • 里面的html是什么样子的,能发一下吗?
  • $('.hidWrapper:first-child').val()
  • 在尝试您的最后一个建议后,我将使用 aspx 页面中的更多内容对其进行编辑。谢谢!
【解决方案4】:

好的,所以我得到了这个工作,但我不是 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);
    })
})

【讨论】:

  • 很高兴事情成功了。感谢的最佳方式是投票并将回复标记为答案。 ;)
  • 会很高兴 :D 只标记一个作为答案吗?如果是这样,我是否标记我的,或者任何看起来最有帮助的人?
  • 如果您提交的答案是有效的答案,我会标记那个答案。如果没有,那么你应该标记最有帮助的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多