asp.net imagebutton在Enter键上触发

时间:2011-04-19 00:11:14

标签: asp.net

我在这里研究了这个问题并尝试了一个不起作用的明显解决方案,所以这里是:

我有一个非常复杂的表单,包括其他控件,三个自动填充文本框。

我还有一个客户似乎无法停止在文本框中输入值并点击Enter键从自动完成列表中选择所需的值。

当他们按Enter键时,表单中的第一个图像按钮会触发,执行完全不同的操作。所以对他们来说,形式是破碎的。

我需要做的是阻止Enter键触发这些图像按钮(表单中有10个)。

我在Page_Load和Page_LoadComplete中尝试了以下代码,但这些代码都不起作用:

imgbtn1.Attributes.Add("onkeydown", "return (event.keyCode!=13);")

任何可以为我节省一些毛发的建议都值得赞赏。

5 个答案:

答案 0 :(得分:3)

这里可以找到一个好的解决方案:

Disable Button click, ImageButton click and/or form submit on Enter Keypress

从链接添加标记

<form id="form1" runat="server"> 
<input type="submit" style="position:absolute;left:-100px;top:-100px;width:0px;height:0px;" onclick="javascript:return false;" /> 
<!-- other form controls below this line -->  
</form>

答案 1 :(得分:1)

您是否检查了这两个参考文献

http://www.bloggingdeveloper.com/post/Disable-Form-Submit-on-Enter-Key-Press.aspx

http://www.webcheatsheet.com/javascript/disable_enter_key.php

他们基本上正在做同样的事情,只是他们正在把它挂到另一个事件上。还要确保您的Javascript是万无一失的,即如果javascript有一些错误,那么您的最终结果可能与预期不符。

答案 2 :(得分:0)

Subhash Dike发布的第二个链接(Disable Enter Key)为我工作。我有两个ImageButtons,当使用这个函数(从原始位修改一点)时,它们都不会触发回发,这很棒。

            document.onkeypress = function (evt) {
            return ((evt) ? evt : ((event) ? event : null)).keyCode != 13;
        };

答案 3 :(得分:0)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Page.Form.DefaultButton = BtSearch.UniqueID
        If Not IsPostBack Then
           ' ...............
        End If
End Sub

答案 4 :(得分:0)

我有类似的问题。 Listview1.ImageButton响应了ENTER。 我们真的希望SAVE能够发生(或者没有,但不良行为正在重新加载页面并使它们变得脾气暴躁)

  1. 为窗口设置处理程序以捕获事件。我在docReady()

    中这样做
    function docReady() {
    
     $(document).keydown(mapKeyCode);
    
    };
    
  2. 在该处理程序中,找到要捕获的密钥代码(输入为13)

  3. https://css-tricks.com/snippets/javascript/javascript-keycodes/

         function mapKeyCode(event) {
        {
    
    
            if (event.keyCode == 13) {
                //event.stopPropagation();
                //event.preventDefault();
                __doPostBack('ctl00$cp1$InventoryPieces$btnSubmit', '');
    
            }
        }
    

    event.StopPropogation将不会发生任何事情。只需吃掉按键即可。那可能就是你想要的。您仍然可以在下面调用ajax方法,这不是事件的一部分。

    event.PreventDefault应该阻止事件执行正常操作。看到这条线路被注释掉了,我遇到了麻烦。有关preventDefault和ENTER的深入讨论,请点击此处。

    这第3行是支付我的人想要在他们按下ENTER键时发生的事情,即使他们可能应该击中标签。我试过(#)。触发器()并没有太多运气。检查元素,我看到它正在调用__postback,所以我把它粘贴进去。我有理由确定()。如果我弄清楚我做错了什么,触发器会工作,我只是采取了另一条路线。

    这对我很苛刻,但它实现了目标。

    希望它有所帮助。