首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否仅在按enter键时更新AngularJS ng-model?

是否仅在按enter键时更新AngularJS ng-model?
EN

Stack Overflow用户
提问于 2014-08-28 02:14:53
回答 3查看 17.5K关注 0票数 16

我有一个输入字段,我正在使用它进行搜索:

代码语言:javascript
复制
<input id="search_input" type="text" ng-model="filter.search_terms">

我还使用了许多其他过滤器(复选框、单选按钮等),并且我有一个$watch on filter,所以任何更改都会触发搜索。问题是,我不希望每次输入一个字母时都会触发对文本字段的搜索,而只希望它只在我按enter时才将其“保存”到filter.search_terms上。

有没有一种简单的方法可以做到这一点,或者我必须删除ng-model并使用一个将其设置为enter的函数执行ng-click操作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-28 02:58:15

您可以尝试将ng-model-options="{updateOn : 'change blur'}"添加到您的输入标记。应该行得通。

票数 34
EN

Stack Overflow用户

发布于 2016-11-23 12:41:16

这里的两个答案似乎都没有完全回答这个问题。问题是如何让模型只在按enter键时更新。我确信最初的帖子已经向前移动了,但对于其他可能发现这一点的人,我将添加我的方法。我想ninjaPixel是最近的。我的回应是基于他的指令。

然而,缺少的部分是阻止默认的ng-model指令在其他情况下更新。为此,我在输入中添加了一个选项来更新keyup:

代码语言:javascript
复制
ng-model-options="{updateOn: 'keyup'}"

这将覆盖在输入事件(用于文本字段)时更新的默认值,并强制在keyup时进行更新。这允许我们的指令通过停止自定义keyup处理程序中的事件传播来阻止原始ng-model指令的默认操作:

代码语言:javascript
复制
if (ev.keyCode !== 13) return ev.stopImmediatePropagation();

可以在这里找到一个可用的代码:http://codepen.io/jessehouchins/pen/MbmEgM

票数 13
EN

Stack Overflow用户

发布于 2015-10-05 21:23:32

您可以通过创建一个名为updateOnEnter的指令来实现此行为,然后将此属性添加到您的HTML元素中。

代码语言:javascript
复制
<input id="search_input" type="text" update-on-enter ng-model="filter.search_terms">

angular.module('app').directive('updateOnEnter', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attrs, ctrl) {
            element.on("keyup", function(ev) {
                if (ev.keyCode == 13) {
                    ctrl.$commitViewValue();
                    scope.$apply(ctrl.$setTouched);
                }
            });
        }
    }
});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25534290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档