0

我从 Visual Basic 运行以下行:

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

它将在每次回发时运行该 javascript。我只是想在一个复选框上运行它。CheckChanged 只是一次然后无论如何都不会再运行它。这必须是可能的,我只是错过了什么?

这很有帮助:Execute javascript function after asp.net postback without Ajax

但不完全是我需要的。

4

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
    };
}());

因此,当函数被“声明”时,它会立即评估外部函数并设置neverCalledtrue,然后将内部函数(这将是您只想执行一次的函数)返回到myFunction变量中(或者在您的情况下,您想要它成为populatePayPlan我认为的变量)。

第一次调用myFunction时,它将运行,但设置neverCalledfalse。该函数的任何后续执行都将跳过该块并且不执行任何操作。这是一个简单而漂亮的技巧,它利用了 JavaScript 的一流函数和闭包方面,应该满足您的需求。

更新:

这是它的运行方式(注意我修改了上面的示例代码):

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

只要确保在您可以访问它的地方声明它,并且在您需要它之前不要调用它。希望有帮助!

于 2012-09-26T19:04:06.020 回答