2009-08-28 65 views
3

在ASP.NET文本框中捕捉按键(在我的情况下是:F5)并执行服务器方法作为响应有一个简单的方法吗?在ASP.NET文本框中捕捉按键

我已经创建了一个简单的SQL前端,并且出于习惯(从SQL Server Mgmt Studio),当我完成键入我的查询时,我一直按F5,但始终刷新浏览器,而不是执行我的SQL查询:-)

我可以在ASP.NET中使用可能的一些Javascript或jQuery来做到这一点吗?

马克

UPDATE:

我有我的ASP.NET页面上使用此jQuery代码:

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

我试过的各种组合 “e.which”, “e.keycode”和键码的各种值 - 但似乎没有工作。我在我的开发机器上使用MS IE 7。 txtQuery是我输入我的查询的ASP.NET文本框,而btnExecute是ASP.NET按钮,它将发送该查询到SQL Server以执行。

任何想法?我是否需要抑制标准事件处理?如果是这样的话,那我该怎么做到呢?

+0

F5被浏览器用来刷新! – 2009-08-28 20:17:03

+0

是的,我知道并注意到 - 但为什么我不能捕捉F12 ??这不是用于浏览器的任何事情,默认情况下..... – 2009-08-28 21:26:35

回答

2

见​​

$("#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'); 
     } 
    }); 
+0

好的,那么如何让jQuery在我的“执行脚本”按钮上“点击”,以便执行服务器端方法? – 2009-08-28 10:05:51

+0

如果被按下的键是F5 – 2009-08-28 10:07:31

+0

,则用服务器的AJAX调用替换“// do stuff here”看起来不起作用--F5仍然刷新浏览器,并且使用e.which == 123 for F12 doesn'我什么都做不了:-( – 2009-08-28 10:21:04

3

如果你想从客户端做一个服务器端调用,您需要使用一些JavaScript来发起回发,或者对您的应用程序执行AJAX调用。

首先,您需要处理您的按键。 jQuery提供方便keypress方法来捕获一个元素上的按键:

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

不幸的是,功能键(F1-F12)需要在某些浏览器,他们不产生keypress事件特殊处理。要在所有现代浏览器中可靠地捕获功能键,您必须查看使用keydownkeyup事件。我建议你阅读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的响应方法。

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

+0

是啊,我注意到了!:-)我似乎无法可靠地捕捉按键 - 无论我使用哪个键(在IE 7上)....嗯..... – 2009-08-28 10:46:32

1

要抑制事件的默认行为,您必须停止冒泡到更高的元素。要做到这一点,只需从你的事件处理程序返回false

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

不幸的是,这取决于浏览器如何解释的功能键,它可能需要防止被上升为特定的键除了行为​​和keyup事件这里。

+1

我现在已经在MS IE 7中捕获了'keydown' **和**'keyup'事件,并尝试了'e.which'和'e.keycode' - 无济于事:-(猜猜我会得到用于在浏览器SQL查询窗口中不按F5 :-( – 2009-08-28 11:04:31

0

你只是得到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){ 
     }, 
    }); 
    } 
});