1

asp.net ページがあり、テキスト ボックスが空の場合、ページ全体をコード ビハインドから非表示にする必要があります。問題は、ドキュメントの準備ができて実行され、一部のページ コントロールからデータを取得する JavaScript と jquery コードがあり、コントロールがレンダリングされないため、このコードが失敗して例外をスローすることです。

コードビハインドでページ全体を非表示にします

// allPageTable is an html table
// with runat=server
this.allPageTable.Visible = false;

Javascript では、テキスト ボックスが null かどうかを確認し、そうでない場合はコードを実行し、そうでない場合は実行しません。しかしmytxtは定義されていないため、 に入りif失敗します。

 if ($('#myTxt') != null) {
    // My JQUERY / JS CODE
    var data = $('#anotherTxt').val(); // Fails cause anotherTxt is not rendered
}

そのため、ページがレンダリングされていないときに JavaScript の実行を回避する方法が必要です。

4

4 に答える 4

3

$('#myTxt')ID myTxt でコントロールが存在しない場合、セレクターは null を返しません。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セレクターメカニズムから返されるすべてが要素の配列で表されるため、それが1つのhtml要素であっても使用できます。

$(window).loadすべてがロードされ、css を含む html ページがレンダリングされた後に実行されます。スクリプトが Windows の負荷で動作する場合、何らかの「まばたき」効果が得られます。(すべてがレンダリングされると消えます)

于 2012-12-12T12:29:11.740 に答える
0

JavaScript コードを Placeholder コントロール内に配置し、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 に答える