【发布时间】: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 不存在的元素的问题。
提前非常感谢! 安迪
【问题讨论】:
-
您的所有代码都在您页面上的此标记内吗?
<asp:Content>我假设您正在使用母版页。 -
是的,我正在使用母版页,从 getElementById 返回 null 的元素都在
标签内。
标签: javascript jquery html asp.net twitter-bootstrap