2010-08-27 83 views
2

可能重複:
Link Button on the page and set it as default button, work fine in IE but not in Mozila設置LinkBut​​ton的作爲ASP默認按鈕:面板在asp.net

如何設置LinkBut​​ton的作爲ASP默認按鈕:面板在asp.net?我知道一個按鈕可以設置爲默認,但我的應用程序使用linkbuttons爲所有窗體。任何建議如何完成。

編輯:

現在,我想這一點, 它在Firefox很好,但我的JavaScript驗證(即)我的LinkBut​​ton的onclient點擊不起作用,爲什麼?

var __defaultFired = false; 

     function WebForm_FireDefaultButton(event, target) { 
      var element = event.target || event.srcElement; 

      if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) { 
       var defaultButton; 

       if (__nonMSDOMBrowser) 
        defaultButton = document.getElementById(target); 
       else 
        defaultButton = document.all[target]; 

       if (defaultButton) { 
        if (typeof (defaultButton.click) != "undefined") 
         defaultButton.click(); 
        else 
         eval(unescape(defaultButton.href.replace("javascript:", ""))); 

        event.cancelBubble = true; 

        if (event.stopPropagation) event.stopPropagation(); 
        return false; 
       } 
      } 
      return true; 
     } 

第二個編輯:

我能夠讓我的自定義LinkBut​​ton控件的工作,但不能能夠鉤的OnClientClick它。來源using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net

和我這樣做,

<%@ Register Namespace="App_Code" TagPrefix="ac" %> 
<asp:Label runat="server" ID="lblHello" /> 
<asp:Panel runat="server" DefaultButton="lbHello"> 
    First name: <asp:TextBox runat="server" ID="txtFirstName" /> 
    <ac:LinkButtonDefault ID="lbHello" runat="server" Text="Click me" 
     OnClientClick="javascript:alert('hai');" OnClick="lbHello_Click" /> 
</asp:Panel> 

我的客戶方功能不起作用,爲什麼?任何建議。

回答

7

出現的問題,而不是用你可能需要增加處理文本框的onKeyPress事件屬性的簡單方法自定義控件。這正確地處理從文本框中輸入輸入並觸發LinkButton的事件。這種方法的不足之處在於Firefox中不會觸發任何事件,這與您鏈接到的博客文章中描述的問題有關。只有當用戶用鼠標點擊鏈接時纔會觸發它。但是,在IE中,它將直接觸發文本框和被點擊。

解決方案#1 -的代碼添加的屬性如下:

protected void Page_Load(object sender, EventArgs e) 
{ 
    txtFirstName.Attributes.Add("onKeyPress", 
     "javascript:if (event.keyCode == 13) __doPostBack('" + lbHello.ClientID + "','')"); 
} 

試一下,看看它是否適合你的需要。請記住我之前描述的限制。

現在,如果您希望上述限制消失,該博客帖子中的one of the comments顯示了一種似乎能正常工作的方法。我已經修改它來擺脫StringBuilder並將其轉換爲C#。

解決方案2 -添加的功能,並將其註冊爲如下代碼:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    string addClickFunctionScript = @"function addClickFunction(id) { 
      var b = document.getElementById(id); 
      if (b && typeof(b.click) == 'undefined') 
      b.click = function() { 
       var result = true; 
       if (b.onclick) result = b.onclick(); 
       if (typeof(result) == 'undefined' || result) 
       eval(b.getAttribute('href')); 
      } 
     };"; 

    string clickScript = String.Format("addClickFunction('{0}');", lbHello.ClientID); 

    Page.ClientScript.RegisterStartupScript(this.GetType(), "addClickFunctionScript", addClickFunctionScript, true); 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "click_" + lbHello.ClientID, clickScript, true); 
} 

頁面標記 - 頁面加價是上述兩種解決方案的同:

<asp:Label runat="server" ID="lblHello" /> 
<asp:Panel ID="Panel1" runat="server" DefaultButton="lbHello"> 
    First name: 
    <asp:TextBox runat="server" ID="txtFirstName" /> 
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click"     
     OnClientClick="javascript:alert('Hello, World!');"/> 
</asp:Panel> 

在這兩種情況下都不需要自定義控件來實現此類功能。把事情簡單化。

+0

它工作完美.. – 2010-09-03 06:11:55

+0

我已經授予它給你..還有一個疑問是如何使這個可重用的所有我的aspx頁面有不同的鏈接按鈕... – 2010-09-03 10:51:20

+0

任何建議... – 2010-09-04 12:23:46

1

看看這個

<asp:Panel runat="server" DefaultButton="lbHello"> 
    First name: <asp:TextBox runat="server" ID="txtFirstName" /> 
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click" /> 
</asp:Panel> 

答案的其餘部分可以在這裏找到。它顯示瞭如何解決與Firefox
http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net/

+0

我試過一樣,但它不能在Firefox中工作 – 2010-08-27 04:56:32

+0

看看我的編輯.. – 2010-08-27 04:58:15

+0

任何建議讓它在Firefox中工作 – 2010-08-27 05:24:53

1

另一種方法可能是像這樣僞造onclick事件。

jQuery(document).ready(function() { 
    jQuery('#<%= txtFirstName.ClientID %>').keypress(function (event) { 
     if (event.keyCode == 13) { 
      eval($('#<%=lbHello.ClientID %>').attr('href')); 
     } 
    }); 
}); 

不足之處在於您需要使用此功能來製作默認按鈕所需的所有位置。

相關問題