0

VisualBasicから次の行を実行しています。

ScriptManager.RegisterStartupScript(Page, Page.GetType, "populatePayPlan", "populatePayPlan();", True)

そしてそれはすべてのポストバックでそのjavascriptを実行します。チェックボックスで実行したいだけです。CheckChangedは一度だけ実行すると、何があっても二度と実行されません。これは可能でなければなりません、私は何かが足りないだけですか?

これは役に立ちました:Ajaxなしでasp.netポストバックの後にjavascript関数を実行します

しかし、私が必要としていたものとは異なります。

4

1 に答える 1

1

これを実現する 1 つのトリックは、クロージャを使用して、関数が 1 回だけ実行されるようにすることです。

var myFunction = (function () {
    var neverCalled = true;
    return function (arg, arg2, arg3) { //Any args for myFunction should be set here
        if(neverCalled) {
            neverCalled = false;
            //Put your function code here.

            return true; //or whatever
        } 
        return false; //or do nothing, or whatever
    };
}());

したがって、関数が「宣言」されると、すぐに外側の関数が評価され、 に設定neverCalledされtrue、内側の関数 (これは一度だけ実行する関数になります) がmyFunction変数に返されます (または、あなたの場合は、それが必要です)。populatePayPlan私が思う変数になる)。

初めて を呼び出すmyFunctionと実行されますが、 に設定さneverCalledfalseます。関数の後続の実行は、ブロックをスキップし、何もしません。これは、JavaScript のファーストクラスの関数とクロージャーの側面を利用するシンプルで気の利いたトリックであり、ユーザーのニーズに対応する必要があります。

アップデート:

実行方法は次のとおりです(上記のサンプルコードを変更したことに注意してください):

myFunction(); //is true;
myFunction(); //is false;
myFunction(); //is false;

アクセスできる場所で宣言し、必要になるまで呼び出さないでください。それが役立つことを願っています!

于 2012-09-26T19:04:06.020 に答える