javascript - AngularJS 中的 oninput 事件属性

标签 javascript angularjs dom-events

我正在构建一系列输入字段,这些字段在达到最大长度时会自动切换。这通过检查 ng-keyup 事件的值的长度来工作,但这有一个小问题,可以通过使用 oninput 事件来解决。然而,这似乎并没有出现在 Angular 中?

我要解决的问题:

当我快速输入最大数量的字符(在我的例子中是两位数字,可以很快输入)时,第一个 keyup 在输入两个字符并跳转到下一个字段后触发。第二个 keyup 仅在 Tab 键后注册,因此它会在下一个字段上触发。这会导致不需要的行为。

复现检查this fiddle (jQuery,因为它可以让我快速重现我正在寻找的问题和解决方案),填写“月”和“年”字段,然后在“日”字段中快速输入 2 位数字。当完成得足够快时,焦点会一直跳到“年”(因为第二个 keyup 是在“月”处于焦点时触发的)。

当使用 .on('input', ...) 时,这个问题就消失了。但是,我不想在 jQuery 中使用它,而是在 Angular 中将其用作属性,例如 ng-keyup。这可能吗?如果不可能,我该如何用另一种方式解决这个问题?

最佳答案

看起来您正在该 jsfiddle 中使用 jquery。而不是 Angular ,绑定(bind) oninput 事件,你可以使用:

大多数情况下,这种 DOM 操作必须在指令内部进行。只是为了演示,我将它添加到 Controller 中:

angular.element(document.querySelectorAll("input")).on("input", function (event) {

    var $input = angular.element(event.target),
        maxlength = $input.attr('max').length;

    if (this.value.length >= maxlength) {
        this.nextElementSibling.tagName==="INPUT" ? this.nextElementSibling.focus() : this.blur();
    }

});

DEMO

关于javascript - AngularJS 中的 oninput 事件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429701/

相关文章:

javascript - 我们如何在 Javascript 中找到对象的长度?

javascript - 如何访问指令中的范围集合对象以手动构造 HTML 片段?

javascript - 如何在测试中伪造 Bluebird 的计时器?

angularjs - Angular 安装

javascript - 从 JavaScript 自定义对象公开事件的正确方法

javascript - 如何在EventListener中传递 "this"和另一个变量?

javascript - 窗口调整大小触发的 DOM 事件

javascript - C++ 使用批处理脚本清除所有浏览器 cookie

javascript - 停止带有 promise 的 $interval 函数

angularjs - 使用图表 js 2.0 扩展现有图表类型 Angular 图表 js