0

読み込み時に、.NET パネル コントロールを非表示にする JavaScript setTimeout() 関数を呼び出し、最初の読み込み時にコード ビハインドで非表示にします。保存ボタンをクリックすると、パネルが表示されるように設定され、setTimeout() 関数が呼び出される時点でページがリロードされます...基本的に、保存をクリックすると、「詳細が保存されました」というパネルが 3 秒間表示されます。消えます。

問題は、外部 JavaScript ファイルが _pDivAlert.ClientID を見つけられないことです (デバッグしたところ、null が返されます)。コードが .aspx ページのタグにある場合にのみ機能します。クライアント ID を HideControl() 関数に渡す方法、または外部 JS ファイルから ClientID を見つける方法について何か提案はありますか?

これが私のコードです。何か提案はありますか?

<script language="javascript" src="Forms.js" type="text/javascript"></script>

<body onload="ToggleAlert()">
<form id="form1" runat="server">
<script type="text/javascript">
    //alert the user that the details were saved
    function HideControl() {
        var control = document.getElementById('<%=_pDivAlert.ClientID %>');
        if(control != null)
            control.style.display = 'none';
    }
    function ToggleAlert() {
        setTimeout("HideControl()", 3000);
    }
</script>

また、ToggleAlert() 呼び出し内で ClientID を送信しようとしましたが、うまくいきませんでした:

<body onload="ToggleAlert('<%=_pDivAlert.ClientID %>')">

外部 JS:

function HideControl(_c) {
var control = _c;
if (control != null)
    control.style.display = 'none';
}
function ToggleAlert(_c) {
    setTimeout("HideControl(_c)", 3000);
}
4

1 に答える 1

1

マークアップをパネルとコードビハインドで非表示にできますか?

Visibleプロパティを false に設定することと、style属性を none に設定することには違いがありdisplayます。最初の設定では要素がまったくレンダリングされません。つまり、探している ID でレンダリングされるものは何もありません。

編集:おそらくHideControl、タイムアウトで呼び出している方法が原因です。これは、文字列ではなく関数にする必要があります。

やってみる

function ToggleAlert(_c) {
    setTimeout( 
        function () { 
            HideControl(_c); 
        }, 3000);
}

わかりやすくするために、文字列を に渡すと、setTimeout評価されてから実行されます。ToggleAlerteval が生成するコード チャンクは、メソッドとは異なるスコープで実行されるため_c、その時点では使用できません。

編集: コントロールへの参照を実際に取得する必要もあります。id 文字列を に渡します。これは、文字列ではなくオブジェクトを期待しているToggleAlertに中継します。HideControl

function HideControl(_c) { // _c is the id of the element
    var control = document.getElementById(_c);
    if (control != null)
        control.style.display = 'none';
}
于 2010-06-25T19:47:35.753 に答える