为什么当标记的输入元素失去焦点时,我从角指令中添加到输入元素中的更改事件不被触发?
更新: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>
普朗克
发布于 2014-06-22 22:14:46
Angular.js使用jqLite
作为jQuery的替代品,而且它不具备jQuery的所有功能。
jqLite是一个很小的、与API兼容的jQuery子集,它允许角度以跨浏览器兼容的方式操作DOM。jqLite只实现了最常用的功能,其目标是减少占用空间。
试着使用on
方法来代替:
return elem.on('change', function() {
alert("Change!");
});
柱塞连杆
有关此链接的更多信息,请访问angular.element
。
发布于 2014-06-22 22:21:14
首先,AngularJS使用jqLite,这是jQuery的一个子集,不包括.change
方法。您应该使用.on
代替。
其次,当元素失去焦点时,change
事件不会触发。使用blur
事件代替。如果使用blur
方法,则可以同时使用.on
和change
事件。
代码:
return elem.on('blur change', function() {
alert('Change!');
});
柱塞演示
https://stackoverflow.com/questions/24356158
复制相似问题