避免在页面加载或准备好时执行javascript的最佳方法?

时间:2012-12-12 12:17:07

标签: javascript jquery asp.net html

我有一个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。

4 个答案:

答案 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;