Possible Duplicate:
Link Button on the page and set it as default button, work fine in IE but not in Mozila


如何在asp.net中将linkbutton设置为asp:panel的默认按钮?我知道可以将按钮设置为默认按钮,但是我的应用程序对所有表单都使用链接按钮。任何建议如何做到的。

编辑:

现在我尝试了
它也可以在firefox中使用,但是我的javascript验证(即onlink的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;
        }

第二次编辑:

我可以使自定义链接按钮控件正常工作,但是无法将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>

我的客户端功能不起作用为什么?任何建议。

最佳答案

除了使用自定义控件外,您还可以采用添加属性来处理文本框的onKeyPress事件的简单方法。这可以正确处理从文本框中按Enter并触发LinkButton的事件。这种方法的缺点是,不会在Firefox中触发任何LinkButton OnClientClick事件,这与您链接到的博客文章中描述的问题有关。仅当用户实际用鼠标单击链接时才触发。但是,在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>

在这两种情况下,都不需要自定义控件即可实现这种功能。把事情简单化。

10-08 07:54
查看更多