代码之家  ›  专栏  ›  技术社区  ›  arik

值更改时的HTML输入

  •  4
  • arik  · 技术社区  · 14 年前

    我有一个输入标签。此标记没有关闭自动完成功能,因此,不必释放一个键来更改此字段的值并聚焦另一个字段。我的问题是:如何检测这个特定字段的任何值变化,例如。

    <input onvaluechange="//do following..." />
    

    javascript属性 onchange 不会触发值的更改,只会触发模糊、焦点等更改…

    编辑:也不一定是按键。由于自动完成,用户只需鼠标单击自动完成结果即可更改值。这不会引发 onkeydown 事件。

    4 回复  |  直到 10 年前
        1
  •  11
  •   bobince    14 年前

    也不一定是按键。由于自动完成

    …以及许多其他非基于键的操作,例如右键单击剪切/粘贴、拖放、撤消/重做、拼写检查调整等。

    HTML5定义了 oninput 捕获所有直接更改的事件。

    遗憾的是,现在没有浏览器支持(在IE中没有支持,在其他浏览器中也有一些bug),因此,如果您确实需要在 onchange 是使用 setInterval 添加一个不断与前一个值进行比较的轮询器。

        3
  •  2
  •   ThatGuy    13 年前

    我有一个类似的问题,绑定到十几个不同的事件并不能切断它,因为有很多不同的方法可以改变输入值,比如 博宾斯 注意。

    所以-我最后写了一个简单的jquery监控插件,它本质上是通用的。 使用它,您可以监视输入值更改、文本区域文本更改、DIV内容更改等:

    https://github.com/nixd3v/monitor

    跟踪DIV内容更改:

    $.monitor('add', function(){return $("div#someDiv").html()}, function(){
        console.log('Div content changed');
    });
    

    跟踪输入值更改:

    $.monitor('add', function(){return $("#password").val()}, function(){
        console.log('input value changed');
    });
    

    当然,它也使用一个循环,而不是通过 设定间隔 ,而不是通过使用setTimeout和自执行匿名函数:

    (function(){
        // do some stuff
        setTimeout(arguments.callee, 100);
    })();
    

    这能做什么——这保证了在代码执行之前不会进行下一个调用。如果在代码中使用轮询,这是正确的方法。

        4
  •  1
  •   Gareth Rees    12 年前

    你可以使用 onKeyPress 用于监视用户键入的更改的属性。

    例如:

    <input type='input' onKeyPress='SomeScriptMethod();'>