我有一个输入字段,我正在使用它进行搜索:
<input id="search_input" type="text" ng-model="filter.search_terms">
我还使用了许多其他过滤器(复选框、单选按钮等),并且我有一个$watch on filter,所以任何更改都会触发搜索。问题是,我不希望每次输入一个字母时都会触发对文本字段的搜索,而只希望它只在我按enter时才将其“保存”到filter.search_terms上。
有没有一种简单的方法可以做到这一点,或者我必须删除ng-model并使用一个将其设置为enter的函数执行ng-click操作?
发布于 2014-08-28 02:58:15
您可以尝试将ng-model-options="{updateOn : 'change blur'}"
添加到您的输入标记。应该行得通。
发布于 2016-11-23 12:41:16
这里的两个答案似乎都没有完全回答这个问题。问题是如何让模型只在按enter键时更新。我确信最初的帖子已经向前移动了,但对于其他可能发现这一点的人,我将添加我的方法。我想ninjaPixel是最近的。我的回应是基于他的指令。
然而,缺少的部分是阻止默认的ng-model指令在其他情况下更新。为此,我在输入中添加了一个选项来更新keyup:
ng-model-options="{updateOn: 'keyup'}"
这将覆盖在输入事件(用于文本字段)时更新的默认值,并强制在keyup时进行更新。这允许我们的指令通过停止自定义keyup处理程序中的事件传播来阻止原始ng-model指令的默认操作:
if (ev.keyCode !== 13) return ev.stopImmediatePropagation();
可以在这里找到一个可用的代码:http://codepen.io/jessehouchins/pen/MbmEgM
发布于 2015-10-05 21:23:32
您可以通过创建一个名为updateOnEnter
的指令来实现此行为,然后将此属性添加到您的HTML元素中。
<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);
}
});
}
}
});
https://stackoverflow.com/questions/25534290
复制相似问题