我有一个asp.net页面,当文本框为空时,我需要隐藏整个页面背后的代码。问题是我有javascript和jquery代码在文档就绪上执行并从某些页面控件中获取数据,并且由于控件未呈现,因此代码失败并引发异常。
在代码背后隐藏整个页面
// allPageTable is an html table
// with runat=server
this.allPageTable.Visible = false;
在Javascript我检查文本框是否为空,如果不是,那么我运行代码,否则我没有。但mytxt
未定义,因此它会进入if
并失败。
if ($('#myTxt') != null) {
// My JQUERY / JS CODE
var data = $('#anotherTxt').val(); // Fails cause anotherTxt is not rendered
}
因此,我需要一种方法来避免在未呈现页面时执行javascript。
答案 0 :(得分:3)
当你使用id,myTxt控件不存在时,选择器$('#myTxt')
将不会返回null。您需要检查选择器返回的length
对象。
if ($('#myTxt').length > 0) {
// My JQUERY / JS CODE
var data = $('#anotherTxt').val(); // Fails cause anotherTxt is not rendered
}
答案 1 :(得分:1)
首先,您需要在“documentReady”上执行此脚本,“onLoad”不是必需的。要检查复选框是否存在,可以使用$('#myTxt').length > 0
,因为从jQuery选择器机制返回的所有内容都以元素数组表示,即使它是一个html元素。
$(window).load
并使用css呈现html页面。如果你的脚本适用于windows加载,那么你将获得一些“闪烁”效果。 (一切都呈现后消失)
答案 2 :(得分:0)
var i = 0;
var interval = setInterval(function () {
i = i + 1;
if(typeof($('#myTxt')) != 'undefined') {
// do your stuff
clearInterval(interval);
}
}, 1000);
如果这是最好的方法,也许别人会发布更好的方法......
答案 3 :(得分:0)
您可以将javascript代码放在占位符控件中,然后设置该控件的可见性,就像为html表设置它一样。这样您的脚本就不会在页面上结束。它需要一些额外的注意,以避免功能/变量的“破坏用法”,但它是一个通用的解决方案。
<table id="allPageTable" runat="server">
...
</table>
<%= "<script type=\"text/javascript\" language=\"javascript\">" %>
<asp:PlaceHolder runat="server" ID="PlaceholderJS">
javascript code here
</asp:PlaceHolder>
<%= "</script>"%>
this.allPageTable.Visible = PlaceholderJS.Visible = false;