我在下面的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>
答案 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;