1

为什么当标记的输入元素失去焦点时,我从角度指令添加到输入元素的这个更改事件不会被触发?

更新:jqlite 文档说-“当前实现了 jQuery 支持的操作的一个子集”......并且它们专门.change在事件处理程序下列出。当前的答案与此相矛盾,但我想听到作者明确地说“文档是错误的”,或者“您对文档的理解是错误的”。目前看起来他们已经浏览了前几行并且没有进一步。没有人知道我是否采取了不同的方式,而实际上我还没有发现另一个错误,而且我很容易再次犯错。

app.directive('changeDirective', function() {
  return {
    link: function(scope, elem, attrs) {
      return elem.change(function() {
        alert("Change!");
      });
    }
  };
});

<html ng-app="plunker">
  <head>
    <script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js" data-semver="1.2.17"></script>
    <script src="app.js"></script>
  </head>
  <body>
    input with change listener<input type="text" change-directive="true">
    <br/>
    select this to remove focus from other input <input type="number">
  </body>
</html>

Plunkr

4

2 回答 2

0

Angular.jsjqLite用作 jQuery 的替代品,它没有 jQuery 的所有功能。

jqLit​​e 是一个微小的、API 兼容的 jQuery 子集,它允许 Angular 以跨浏览器兼容的方式操作 DOM。jqLit​​e 仅实现最常用的功能,目标是占用空间非常小。

尝试改用该on方法:

return elem.on('change', function() {
    alert("Change!");
});

Plunker 链接

检查此链接以获取有关angular.element.

这是所有 jqLit​​e 函数的列表

于 2014-06-22T22:14:46.020 回答
0

首先,AngularJS 使用jqLit​​e,它是 jQuery 的一个子集,它不包含.change方法。你应该.on改用。

其次,change当元素失去焦点时,事件不会触发。请改用blur事件。如果使用该方法,则可以同时使用blur和事件。change.on

代码:

return elem.on('blur change', function() {
    alert('Change!');
});

Plunker 上的演示

于 2014-06-22T22:21:14.047 回答