2013-01-07 26 views
3

我有一组ASP.NET控件:的OnClientClick正在停止回发

<asp:LinkButton ID="Find" 
    ClientIDMode="Static" 
    runat="server" 
    CausesValidation="true" 
    OnClientClick="$('#Find').attr('disabled', 'disabled'); $('#SearchingLabel').show();"> 
    <span>Search</span> 
</asp:LinkButton> 
<asp:Label ID="SearchingLabel" 
    ClientIDMode="Static" 
    runat="server" 
    Text="Searching..." 
    style="display: none;" /> 

并且你可以看到我消耗OnClientClick,这样我可以禁用Find按钮,然后向SearchingLabel和JavaScript的工作原理没有错误BTW)。很基本的东西。

此外,围绕CausesValidation属性,我有在页面上验证控件,但目前没有验证错误。

但是,即使我没有返回来自JavaScript的false页面也不会回发。我甚至尝试return true;但这并没有改变任何东西(不是真的令人惊奇,但它是值得一试)。

我期待着您的反馈!

+0

的'的CausesValidation = “真”'?你的页面上有ValidationControls吗?这些可能会导致它 – codingbiz

+0

@codingbiz,我确实在页面上有验证控件,但没有验证错误。如果您取下控制或者你是回发与控制的母公司控制,像'的OnClientClick = –

+0

这也可能发生“$(这)一个.remove()”'会导致同样的问题。 –

回答

7

好像要禁用您的按钮,回发之前。

你可以试试你的网页/脚本,而不将禁止参与其中:

OnClientClick="$('#SearchingLabel').show();" 

如果一切正常,有一个短暂的延迟尝试:

OnClientClick="setTimeout(function() { $('#Find').attr('disabled', 'disabled'); }, 100); $('#SearchingLabel').show();" 
+0

好吧,所以删除'禁用'jQuery的作品,并导致它再次回发。然而,'setTimeout'会导致意想不到的副作用,因为按钮不会禁用(例如,如果我在服务器端放置了一个'Thread.Sleep'五秒钟),但SearleLabel不显示**,即使我在* setTimeout **之前放了那行*。 –

+0

我没有看到这一个来...你在你的代码中纠正了我的错字吗?我输入“功能”而不是“功能”,将编辑我的答案。 – Jacco

+0

就是这样。现在就像一个魅力! –

0

试试这个js代码的onload

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest); 
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest); 
function BeginRequest(sender, e) { 
    e.get_postBackElement().disabled = true; 
    // or your code 

} 
function EndRequest(sender, e) { 
    ....... 
}