2013-02-26 131 views
2

我正在使用一个简单的ASP.NET C#应用程序,它使用USB条形码扫描器。我有一个详细信息视图,默认情况下在底部插入提交按钮。当页面加载时,表单从URL中获取ID并将其输入到第一个字段,然后将光标焦点设置为第二个字段。使用IF语句处理回车键

默认情况下,USB扫描仪输入扫描的数字,然后输入Enter键。我想提出一个处理程序在那里,基本上说是这样的:

  • 如果光标在TextBox2中,并按下Enter键,保持数据 TextBox2中移动光标到textbox3。
  • 如果光标在文本框3中并按下回车键,则将数据保存在文本框3中并点击提交按钮。

这个想法是,用户可以扫描表格中每个文本框中的3或4个条形码,而不需要A)每次触发提交按钮,以及B)不必在每个字段之前点击扫描(如果我禁用了Enter键)。

这是我的代码的开始,它从URL抓取ID并填充textbox1,然后将焦点设置为textbox2。

protected void DetailsView1_DataBound(object sender, EventArgs e) 
    { 
     if (DetailsView1.CurrentMode == DetailsViewMode.Insert) 
     { 
      if (!string.IsNullOrEmpty(Request.QueryString["id"])) 
      { 
        TextBox tbox1 = DetailsView1.FindControl("TextBox1") as TextBox; 
        TextBox tbox2 = DetailsView1.FindControl("TextBox2") as TextBox; 
        if (tbox != null) 
        { 
         tbox.Text = Request.QueryString["id"].ToString(); 
        } 
        SetFocus(tbox2); 
      } 
     } 
    } 
+0

当使用'textbox1'完成时,你能否检查一下哪个控件当前有焦点并设置它呢?例如,如果'tbox2'有焦点,'SetFocus(tbox3)'? – Brian 2013-02-26 20:48:06

回答

2

但我认为输入流已经起作用了吗? 为什么不只为JQuery添加文本框的流?

$('#TextBox1').keydown(function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); // Crossbrowser fix 
    if(code === 13) {   //If Enter keycode 
    $('#TextBox2').focus(); // Set focus to second textbox 
    e.preventDefault();  // Prevent that the enter does a submit 
    } 
}); 

如果输入流程不起作用,您可以为表单配置此功能。

+0

在我的情况下,textbox2后面跟着textbox3。当我扫描条形码时,textbox2中充满数据,按下回车键并提交表格。它一起跳过textbox3。 – 2013-02-26 20:55:16

+0

请记住,名称仅用于示例,并且您也可以将此示例用于Textbox2和Textbox3。e.preventDefault应该防止输入的keydown将执行并将焦点设置为您提供的指定文本框。为此,您需要认为在我的示例中Textbox1是Textbox2,textbox2是Textbox3。但是你可以编辑自己的名字。 – spons 2013-02-26 21:14:27

+0

我了解名称更改,我想我对代码中的位置感到困惑。做一些谷歌富,但如果你知道你的头顶,将不胜感激。 jQuery非常不错。 – 2013-02-26 22:13:44