<asp:TextBox ID="txtUser" runat="server" MaxLength="20" Width="150px"
                    TabIndex="3" onchange="OnUserChange(this.value,this.id);"></asp:TextBox>
function OnUserChange(str,ctl)
{// debugger
   if(str == '1')
   {
      document.all(ctl).value = '';
   }
   else
   {
      // 其它的一些操作
   }
}在txtUser中输入1,失去焦点后,txtUser会自动变为空.
但,此时如果再在txtUser输入1,发现onchange事件没有触发.放了debugger,发现确实是没有进入函数.就是没有触发.
如果输入其它内容,会触发!

解决方案 »

  1.   

    onchange 事件是与上一次值改变了才触发。你2次都是1就不触发了。
      

  2.   

    我觉得楼主的需求应该是onblur事件,只要失去焦点,就执行一下。
      

  3.   


    function OnUserChange(str,ctl)
    {// debugger
      if(str == '1')
      {
      document.all(ctl).value = '';
      }
      else
      {
      // 其它的一些操作
      }<asp:TextBox ID="txtUser" runat="server" MaxLength="20" Width="150px"
      TabIndex="3" onChange="OnUserChange(this.value,this.id);"></asp:TextBox>
      

  4.   


    是与上一次值不同呀!
    第一次输入1后,会将txtUser置于空。所以这时,txtUser的值是空值。
    再输入1,其实应该是由空变为1,应该会发生onchange事件呀!
      

  5.   

    没丢焦点之前不提交值。好像。不知道lz是不是在做自动完成功能?我一直是这么做的:
    用settimeout来延时一秒, 实现查询。
    如果再次按键, 并且上一次的Timeout还没走完, 
    cancel掉上一次的并且重新开一个settimeout。这样就导致了, 连续输入, 可以优化下, 不查询。
    一旦停止输入, 就开始查询。比onchange, onblur都好用。
      

  6.   


    <!--
    哈哈,是可以的哦,不信你瞧瞧~
    -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Question from CSDN</title>
        <script type="text/javascript">
                function OnUserChange(str,ctl)
    {// debugger
      if(str == '1')
      {
      document.all(ctl).value = '';
      }
      else
      {
      // 其它的一些操作
      }
    }
        </script>
    </head>
    <body>
        <form runat="server" id="frmIT">
        <asp:TextBox ID="txtUser" runat="server" MaxLength="20" Width="150px"
      TabIndex="3" onchange="OnUserChange(this.value,this.id);"></asp:TextBox>
      </form>
    </body>
    </html>
      

  7.   

    仔细查看下Onchange和Onblur之间的区别,Onchanger是值改变,OnBlure是失去光标。
    LZ需求的是OnBlure而不是OnChanger
      

  8.   

    onchange 是改变value值的时候触发的,你要和上次的值不同就可以
      

  9.   

    我不能用ONBLUR。 因为如果里面有值,光标移入再移出也会执行查询操作! 这是不允许的!
    onchange 也是在失去焦点后触发的!还有很多同学说我输入的值是和上一次的值相同。 不知道这些同学有没有看清楚我的描述!
    文本框中的值是这么改变的:
    1 ----> 空 ----> 1
    其中的“空”是在第一次输入1后由JS修改的!
    第二次输入1后,我本以为文本框的值会再次被JS置于空。
    但却没有! 问题就在这里
      

  10.   


    这要看浏览器是怎么处理的onchange(),在IE下,value值改变了,再失去焦点的时候就会触发onchang(),所以没法获取焦点的时候onchang()不起作用。但是,当这种情况的时候是不会触发的,就是通过页面脚本修改了其value值是不触发onchang(),onchang捕获不到,这个情况的原因就不清楚了。不过IE还一个函数onpropertychange()能够及时捕获这种value的改变,只有IE有这个函数,局限性很大。
      

  11.   

    按照楼主的意思是失去焦点啊,失去焦点应该是onblur事件
      

  12.   

    用onpropertychange吧,这样    <form runat="server" id="frmIT">
        <asp:TextBox ID="txtUser" runat="server" MaxLength="20" Width="150px"
      TabIndex="3" onpropertychange="OnUserChange(this.value,this.id);"></asp:TextBox>