代码之家  ›  专栏  ›  技术社区  ›  ACP

将linkbutton设置为的默认按钮asp:面板输入asp.net[副本]

  •  3
  • ACP  · 技术社区  · 14 年前

    可能重复:
    Link Button on the page and set it as default button, work fine in IE but not in Mozila

    如何将linkbutton设置为的默认按钮asp:面板输入asp.net?我知道按钮可以设置为默认值,但我的应用程序对所有窗体都使用链接按钮。任何关于如何做的建议。

    现在我试过了, 它在firefox中也可以工作,但是我的javascript验证(ie)在客户端单击我的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;
            }
    

    第二次编辑:

    我可以使我的自定义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>
    

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

    4 回复  |  直到 7 年前
        1
  •  9
  •   Ahmad Mageed    14 年前

    与使用自定义控件不同,您可以采用简单的方法添加属性来处理textbox的 onKeyPress 输入 从文本框触发 LinkButton 的事件。这种方法的缺点是 链接按钮 OnClientClick

    解决方案#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>
    

    在这两种情况下,实现这种功能都不需要自定义控件。保持简单。

        2
  •  1
  •   Chase Florell    14 年前

    看看这个

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


    http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net/

        3
  •  1
  •   Dofs    14 年前

    另一种方法是像这样伪造onclick事件。

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

        4
  •  0
  •   Community Egal    7 年前

    看到这个了吗

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

    虚拟按钮答案是最干净的解决方案。