2010-08-27 1 views
2

Можно создать дубликат:
Link Button on the page and set it as default button, work fine in IE but not in Mozilaустановить LinkButton как кнопка по умолчанию для жереха: панель в asp.net

Как установить LinkButton в качестве кнопки по умолчанию для жереха: панель в asp.net? Я знаю, что кнопка может быть установлена ​​по умолчанию, но мое приложение использует кнопки ссылок для всех форм. Любое предложение, как это можно сделать.

EDIT:

Теперь я попытался это, Он работает в Firefox, а также, но мой Javascript проверки (то есть) onclient щелчок моей LinkButton не работает, почему?

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

Второй EDIT:

Я был в состоянии сделать свой обычай LinkButton управления работой, но не мог в состоянии подключить 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. Недостатком этого подхода является то, что любое событие LinkButtonOnClientClick не будет запущено в 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

он работал отлично .. –

+0

Я его наградил за это. Еще одно сомнение заключается в том, как сделать это многоразовым для всех моих страниц aspx, у которых есть разные кнопки ссылок ... –

+0

любое предложение ... –

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 –

+0

посмотри на мое редактирование .. –

+0

любое предложение, чтобы заставить его работать в firefox –

1

Другой подход может заключаться в подделке события onclick, подобного этому.

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

Недостатком является то, что вы должны использовать его для всех мест, которые необходимо использовать по умолчанию.

Смежные вопросы