代码之家  ›  专栏  ›  技术社区  ›  marc_s MisterSmith

在ASP.NET文本框中捕获按键

  •  3
  • marc_s MisterSmith  · 技术社区  · 16 年前

    在ASP.NET文本框中捕获按键(在我的例子中是f5)并执行服务器方法作为响应是否很容易?

    我创建了一个简单的SQL前端,出于习惯(从SQL Server mgmt studio),我在输入完查询后一直按F5键,但这总是刷新浏览器,而不是执行我的SQL查询:—)

    我可以在ASP.NET中使用一些可能的javascript或jquery来实现这一点吗?

    马克

    更新:

    我的ASP.NET页面上有这个jquery代码:

     $(document).ready(function() {
        $("#<%= txtQuery.ClientID %>").keydown( function (e) {
            if (e.keycode == 116) {
               $("#<%= btnExecute.ClientID %>").trigger('click');
            }
        });
     });
    

    我尝试了“e.which”、“e.keycode”和不同的keycode值的各种组合,但似乎都不起作用。我在开发机器上使用的是IE 7。 txtQuery 是我在其中键入查询的ASP.NET文本框,以及 btnExecute 是将该查询发送到要执行的SQL Server的ASP.NET按钮。

    有什么想法吗?我是否需要以某种方式抑制标准事件处理?如果是的话:那我该怎么做到呢?

    4 回复  |  直到 12 年前
        1
  •  2
  •   rahul    16 年前

    keypress( fn )

    $("#yourtextboxId").keypress( function (e) {
       // do stuff here
    });
    

    e.which
    

    将识别按下的键,我认为F5的键码是 一百一十六

    对于触发事件,可以使用

    trigger 方法

    $("#yourexecutescriptbutton").trigger('click');
    

    编辑:

    如果您需要捕获F5,则给出一个keydown事件处理程序

    $("#yourtextboxId").keydown( function (e) {
            if ( e.which === 116 )
            {
                $("#yourexecutescriptbutton").trigger('click');  
            }
        });
    
        2
  •  3
  •   Paul Turner    16 年前

    如果您想从客户机进行服务器端调用,您要么需要使用一些JavaScript来启动回发,要么对应用程序执行Ajax调用。

    首先,你需要处理你的按键。jquery提供了 keypress 在元素上捕获按键的方法:

    $("#mytextbox").keypress(function(e){
        // Use e.which, etc to find out which key was pressed.
    });
    

    不幸的是,功能键(F1-F12)在某些浏览器中不生成时需要特殊处理。 按键 事件。要在所有现代浏览器中可靠地捕获功能键,您必须使用 keydown keyup 事件。我建议你读 this article 了解如何解释所支持的浏览器中的关键事件。

    接下来,您需要创建一个ASP.NET Web方法。实现这一点的方法是在页面上创建一个公共静态方法(如果愿意,也可以创建一个单独的页面),然后用webmethodattribute属性对其进行修饰:

    [WebMethod]
    public static string MyMethod(int foo, int bar, string bob)
    {
        return "Welcome to The World of Tomorrow!";
    }
    

    最后,您可以使用jquery调用此方法并对响应执行一些操作:

    var request = $.ajax({
        type: "POST",
        url: "MyPage.aspx/MyWebMethod",
        data: "{ foo:22, bar:19, bob:'A string' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            var response = null;
    
            if (typeof (msg.d) != 'undefined')
                response = msg.d;
    
            if (response == null)
                Error('Message returned by ASP.NET AJAX call is not in the expected format.');
    
            alert(response);
            },
        error: function(request, textStatus, errorThrown) {
    
            if (console && typeof console.log != "undefined") {
    
                try {
                    var result = eval("(" + request.responseText + ")");
    
                    if (result && typeof result.Message != "undefined")
                        console.log(result.ExceptionType + ": " + result.Message + "\n" + result.StackTrace);
                }
                catch (ex) {
                    console.log(request.responseText);
                }
            }
        }
    });
    

    在一个成功的呼叫中,这一小段代码将显示一个警告:“欢迎来到明天的世界!”,作为来自ASP.NET方法的响应传递给浏览器。

    简短的回答是,你所要求的是完全可能的,但是它并不像你想象的那么简单。检测按键的麻烦可能特别棘手。祝你好运!

        3
  •  1
  •   Paul Turner    16 年前

    要抑制事件的默认行为,必须阻止它冒泡到更高的元素。为此,只需返回 false 从事件处理程序:

    $("#yourtextboxId").keydown( function (e) {
        if ( e.which === 116 )
        {
            $("#yourexecutescriptbutton").trigger('click');
            return false; // Stops keydown event being bubbled.  
        }
    });
    

    不幸的是,根据浏览器如何解释功能键,可能需要防止 keydown keyup 除了此处的行为外,还针对该特定键引发的事件。

        4
  •  0
  •   Hemal    12 年前

    只需在jquery中获取ASP.NET文本框的客户端ID。 然后通过jquery调用ajax,如下所示。

    var aspTextBox = $("#<%=Me.TextBox1.ClientId%>");
    aspTextBox.keypress(function(e){
    //Code for $.ajax request
        if(e.which==13){
        $.ajax({
        type:"POST",
        url:"WebService.asmx/GetData",
        contentType:"application/json;charset=utf-8",
        dataType:"json",
        data:"{}",
        success:function(data){
            },
        error:function(a,b,c){
            },
        });
        }
    });