none
asp.net/c#textbox接收事件 RRS feed

  • 问题

  • 想实现用textbox接收一条来自扫描枪的数据,并自动响应接收,扫描枪上设置了换行(LF)和回车(CR)后缀,用textbox multiline,能显示每扫的一条条记录,也就是能自动回车换行,用singleline,接收一条记录无反应,用网上一些方法如"pressdown"或者"keyCode==13"试过,无反应,但用键盘回车键能生效,这是怎么回事?有好的解决方法没???
    代码如下:
    aspx:
    <head runat="server">
        <title>Scan </title>
        <script language="javascript">
            function EnterTextBox()
            { 
                if(event.keyCode==13)
                {
                    document.getElementById("btnSubmit").click();
                }
            }
        </script>
    </head>
    <body onkeypress="return EnterTextBox()">
        <form id="form1" runat="server" defaultbutton="btnSubmit">

            <asp:TextBox ID="txtScan" runat="server" Height="21px" TextMode="MultiLine"> </asp:TextBox>
            <asp:button id="btnSubmit" text="Submit" runat="server" OnClick="btnSubmit_Click">
            </asp:button>
        </form>
    </body>
    </html>

    cs:
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    txtScan.Attributes.Add("onkeypress", "EnterTextBox()");
                }
            }
    2009年9月9日 16:49

答案

  • 你可以试试onpropertychange事件

    <textarea onpropertychange="process(this)"></textarea>
    <div id=x></div>
    <script>
    function process(o)
    {
      if(o.value.indexOf("\r\n")>-1) document.getElementById("x").innerHTML = "ok"
    }
    </script>

    【孟子E章】
    2009年9月11日 4:40
    版主

全部回复

  • 测试是可以的。

    这样可以兼容其他浏览

    <head id="Head1" runat="server">
      <title>Scan </title>
    
    <script type="text/javascript">
      function EnterTextBox(evt) {
        evt = window.all ? window.event : evt
        if (evt.keyCode == 13) {
          document.getElementById("<%=btnSubmit.ClientID %>").click();
        }
      } 
    </script>
    
    </head>
    <body onkeypress="return EnterTextBox(event)">
      <form id="form1" runat="server" defaultbutton="btnSubmit">
      <asp:TextBox ID="txtScan" runat="server" Height="21px" TextMode="MultiLine"> </asp:TextBox>
      <asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClick="btnSubmit_Click">
      </asp:Button>
      </form>
    </body>
    </html>
    
    

    txtScan.Attributes.Add("onkeypress", "EnterTextBox(event)");


    【孟子E章】
    • 已建议为答案 mldark 2009年9月10日 11:36
    2009年9月10日 1:15
    版主
  • 你好 建议使用onkeydown事件

    function Dokeydown()
       {
           var obj = event.keyCode;
        if(obj == '13')
        {
         
         document.getElementById("btnSubmit").click(); 
    return false;
        }
       }



    <body onkeydown="return Dokeydown();">
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月10日 1:30
    版主
  • 不管用啊。
    2009年9月10日 8:57
  • ie7,ie8,firefox3.5,chrome都测试了是可以的
    【孟子E章】
    2009年9月10日 9:05
    版主
  • 我用的是IE6,我用键盘回车测试是可以的,用扫描枪在文本上输入,也是可以显示换行回车,是不是键盘输入和扫描枪输入回车是不同的???
    2009年9月10日 9:09
  • 没有使用过扫描仪,具体情况没有办法测试。

    输入有很多种方式,如拷贝粘贴,键盘输入是其中一种,这个事件应该只针对键盘输入的

    【孟子E章】
    2009年9月10日 9:23
    版主
  • 我觉得也是,是扫描枪,不是扫描仪。
    2009年9月10日 9:41
  • 扫瞄枪和扫瞄仪是一样的,都可以设置不同的参数,你把扫瞄桦设置成自带一个回车不要换行。
    知识改变命运,奋斗成就人生!
    2009年9月11日 1:09
    版主
  • 试过把“设置成自带一个回车不要换行”,也不成。
    我试着用字符表示出来扫到的东西,用indexOf搜索,确定是"\r\n"结束的,有办法判断遇到"\r\n"的,自动响应事件吗???
    2009年9月11日 1:35
  • 一般情况都只需要处理回车就行了, 你新建一个空白页面,试试,还有你怎么确定是没有反应的。
    知识改变命运,奋斗成就人生!
    2009年9月11日 1:43
    版主
  • 用来触发按钮事件“protected void btnSubmit_Click(object sender, EventArgs e)
            {
                Response.Write(Utility.Alert("!!!!" + txtScan.Text.ToString()));
            }”
    用键盘回车测试,没问题。

    2009年9月11日 1:48
  • 你可以试试onpropertychange事件

    <textarea onpropertychange="process(this)"></textarea>
    <div id=x></div>
    <script>
    function process(o)
    {
      if(o.value.indexOf("\r\n")>-1) document.getElementById("x").innerHTML = "ok"
    }
    </script>

    【孟子E章】
    2009年9月11日 4:40
    版主
  • 谢谢,上面这个方法可行,但遇到另外一个问题,我把script脚本写在母板中,子页面无法使用上述脚本,有办法解决吗??

    2009年9月13日 10:45
  • document.getElementById("<%=服务器控件的.ClientID%>").
    【孟子E章】
    2009年9月13日 12:22
    版主
  • 但btnSubmit是在子页面中,而且不同的页面有相同id的btn.
    2009年9月13日 12:56
  • 母板和子页最终的编译结果是合成为一个文件的,你可以将脚本定义成一个文件,做成函数,然后使用参数传递对象的id

    比如

    <textarea onpropertychange="process(this,'x')"></textarea>
    <div id=x></div>
    类似这样的思路。
    <script>
    function processInput(a,b)
    {
      if(a.value.indexOf("\r\n")>-1) document.getElementById(b).innerHTML = "ok"
    }
    </script>


    不过,因为Web需要网络来支持,所以,你提交数据要考虑到网络的环境问题。或者POST出现问题的情况,数据有可能丢失。
    【孟子E章】
    2009年9月13日 13:13
    版主
  • 这样为什么不行??
    Master:
    function process(evt,page)
             {
                if(evt.value.indexOf("\r\n")>-1)
                {
                    document.getElementById(page).click();
                    return false;
                }
             }
    子页面:
    <textarea id="txtScan" onpropertychange="process(this,'<%=btnSubmit.ClientID %>')" runat="server"></textarea>
    2009年9月13日 13:43
  • 不用了,我弄出来了。太谢谢楼上几位了。

    2009年9月13日 14:48