单击时禁用asp.net按钮

时间:2010-08-30 08:39:48

标签: javascript asp.net asp.net-ajax

我在下面的javascript代码在页面回发期间禁用了asp.net按钮。我还有一个下拉列表,其Autopostback属性设置为true。不幸的是,当我在下拉列表中更改selectedItem时,该按钮被禁用。

我希望仅当页面回发是由同一个按钮引起时才禁用按钮,而不是页面上的任何其他控件。

有些人请帮助我对下面的代码做出哪些改变来实现这一目标。

<script type="text/javascript">
    // Get a reference to the PageRequestManager.
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    // Using that prm reference, hook _initializeRequest
    // and _endRequest, to run our code at the begin and end
    // of any async postbacks that occur.
    prm.add_initializeRequest(InitializeRequest);
    prm.add_endRequest(EndRequest);

    // Executed anytime an async postback occurs.
    function InitializeRequest(sender, args) {

        // Change the Container div's CSS class to .Progress.
        $get('Container').className = 'Progress';

        // Get a reference to the element that raised the postback,
        //   and disables it.
        $get(args._postBackElement.id).disabled = true;
    }

    // Executed when the async postback completes.
    function EndRequest(sender, args) {
        // Change the Container div's class back to .Normal.
        $get('Container').className = 'Normal';

        // Get a reference to the element that raised the postback
        //   which is completing, and enable it.
        $get(sender._postBackSettings.sourceElement.id).disabled = false;
    }                 
</script>

2 个答案:

答案 0 :(得分:0)

好吧,你正在接触任何异步回发,听起来你只想挂进特定按钮的回发。

但是,您可以通过最少的代码调整来解决此问题,只需在禁用它之前检查触发回发的控件的ID。

if (args._postBackElement.id == idOfTheButton)
   $get(args._postBackElement.id).disabled = true;

当然,如果您的按钮是服务器端按钮(asp:按钮),那么您需要从服务器向客户端呈现客户端ID,或者直接访问它:

if (args._postBackElement.id == '<%= YourButton.ClientId %>')
   $get(args._postBackElement.id).disabled = true;

正如我所说,有更好的解决方案(比如只是挂钩按钮的回发事件,而不是任何回发事件)。

但是,这应该可以解决你的问题。

答案 1 :(得分:0)

您正在引用此处按钮的ID:

$get(args._postBackElement.id).disabled = true;

所以你需要做的就是在将ID设置为禁用之前检查ID的值:

if(args._postBackElement.id == '<%=MyButton.ClientID %>')
    $get(args._postBackElement.id).disabled = true;