1

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

4 回答 4

3

当您使用 id 进行控制时,选择器$('#myTxt')不会返回 null,myTxt 不存在。您需要检查length选择器返回的对象。

if ($('#myTxt').length > 0) {
    // My JQUERY / JS CODE
    var data = $('#anotherTxt').val(); // Fails cause anotherTxt is not rendered
}
于 2012-12-12T12:27:04.627 回答
1

首先,你需要在“documentReady”上执行这个脚本,“onLoad”不是那么必要。要检查复选框是否存在,您可以使用$('#myTxt').length > 0,因为从 jQuery 选择器机制返回的所有内容都表示在元素数组中,即使它是一个 html 元素。

$(window).load在加载完所有内容并呈现包含 css 的 html 页面后执行。如果您的脚本可以在 Windows 负载上运行,那么您将获得一些“闪烁”效果。(一切渲染后消失)

于 2012-12-12T12:29:11.740 回答
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;
于 2012-12-12T12:44:47.913 回答
0
var i = 0;

var interval = setInterval(function () {
    i = i + 1;

    if(typeof($('#myTxt')) != 'undefined') {
         // do your stuff
         clearInterval(interval);
    }

}, 1000);

不要如果这是最好的方法,也许其他人会发布更好的方法......

于 2012-12-12T12:32:32.617 回答