按回车键触发asp.net链接按钮的点击事件

5

我有两个asp文本框,我已经使用jQuery将它们连接起来,以便在任何一个文本框上按下回车键时触发linkbutton服务器端点击。但这似乎不起作用,请帮我解释一下我做错了什么。我需要一个适用于所有主要浏览器的解决方案[IE7,8,9],[Firefox 3,4],Safari [4,5]。

这是我的代码:

<script language="javascript" type="text/javascript">
function GC_PostBack() {
    jQuery('#<%=lnkSubmitGiftCardNumber.ClientID%>').trigger("click");
}

在服务器端的Page_Load事件中,我将此函数附加到文本框的onkeypress事件上。
 if (!IsPostBack)
    {
        txtGiftCardNumber.Attributes.Add("onkeypress", "if(window.event.keyCode == 13) { GC_PostBack(); }");
        txtGiftCardPin.Attributes.Add("onkeypress", "if(window.event.keyCode == 13) { GC_PostBack(); }");
    }

我尝试使用 .click() 而不是 .trigger("click"),但是没有成功。请帮忙! 谢谢。
6个回答

2

Alison是正确的,如果您想像您现在这样使用jQuery, 只需执行以下操作:

<script language="javascript" type="text/javascript">
    function GC_PostBack() {
        jQuery('#<%=lnkSubmitGiftCardNumber.ClientID%>').click();
    }
</script>

编辑:

如果你正在使用jQuery,为什么不将所有内容都使用jQuery呢?目前,你所拥有的内容在跨浏览器的keypress事件上无法工作。我建议像这样:

(function() {

    $('input[id$="txtGiftCardNumber"], input[id$="txtGiftCardPin"]')
        .keypress(function(e) {

            var keyCode;

            if (window.event) keyCode = window.event.keyCode;
            else if(e) keyCode = e.which;
            else return true;

            if (keyCode == 13) {

                $('[id$="lnkSubmitGiftCardNumber"]').click();
                return false;

            } else return true;

        });

});

我尝试使用onclick,但似乎无法触发链接按钮的后台处理程序和回传。 - Ashar Syed
@Ashar - 请检查我的修改后的答案。您不需要在代码后端附加客户端事件。使用jQuery来完成这个任务。此外,不要尝试使用<%= Element.ClientID %>,即使它可以工作,也使用id$=,因为您不需要知道该元素的ClientID。它将搜索以您在其后面放置的任何内容"结尾"的元素。因此,在我们的情况下,它将是您命名的元素,例如txtGiftCardNumbertxtGiftCardPin。更容易。此外,在触发的click()事件上方,您可以执行一个alert("triggering click");来验证它是否正常工作。 - Code Maverick

1
<asp:LinkButton ID="LinkButton1" OnClick="LinkButton1_Click"runat="server">G</asp:LinkButton>

  $(document).keypress(function (e) {
        if (e.which == 13) {
            javascript: __doPostBack('LinkButton1', '')
        }
    });

1

以下代码可用于触发后台回发:

document.getElementById('<%= lnkSubmitGiftCardNumber.ClientID %>').click();

不,这似乎不起作用。我尝试在jQuery函数中更改我的内容,并直接在Page_Load的Attributes.Add中插入。 - Ashar Syed
我使用了您的确切代码(加上我的答案)进行了测试,它完美地工作了。这段代码确实有效。如果它对您不起作用,那么页面上肯定有其他干扰因素。作为一个测试,尝试从页面上的简单链接触发postback。它应该会postback。 - NakedBrunch

1

我知道这是一篇旧文章,但可能还有其他像我一样仍在寻找答案的人。我尝试了这段代码,对我来说效果很好。检查“回车键”的方法相同,但使用__doPostBack()而不是click()。

__doPostBack('<%=lnkSubmitGiftCardNumber.UniqueID%>', '');

1

0

你可以使用JQUERY在客户端完成所有操作。假设txtGiftCardNumber具有txtGiftCardNumberID作为ID,在这种情况下,你可以将keydown事件与IE关联起来,这比keypress事件更好。

  $('input:text[id$=txtGiftCardNumberID ]').keydown(function (event) {
           if (event.keyCode == '13') {
            $('#'+<%= lnkSubmitGiftCardNumber.ClientID %>).click();
            }
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接