在ng-click中得到错误的目标对象
getting wrong target object in ng-click
html代码
<div ng-click="sortOrder($event, 'fullName')" class="col-xs-2 sortable asc">
<span>Name</span>
</div>
这是js代码
$scope.sortOrder = function(event, name) {
var $elem = $(event.target);
var c = $elem.hasClass('desc') ? 'asc' : 'desc';
$elem.removeClass('asc desc').addClass(c);
}
单击div后,它将类添加到内部span,而不是div.col-xs-2
改用currentTarget
:
var $elem = $(event.currentTarget);
当前目标是在其上创建事件侦听器的元素,目标是触发事件的元素。
这意味着,在您的情况下,如果单击span target
将是span,如果单击div target
将是div。但在这两种情况下,currentTarget
都将是div.
另一个简单的解决方案是使用ng-class
。
HTML:
<div ng-click="changeSortOrder()" class="col-xs-2 sortable" ng-class="sortOrder">
<span>Name</span>
</div>
JS:
$scope.sortOrder = 'asc';
$scope.changeSortOrder = function () {
$scope.sortOrder = $scope.sortOrder === 'asc' ? 'desc' : 'asc';
};
演示:http://plnkr.co/edit/0zrk7YQ7RCEVbSEj3zSh?p=preview
将逻辑移至指令的示例:
JS:
app.directive('mySort', function () {
return {
scope: true,
link: function (scope, element) {
var defaultSortOrder = 'asc';
element.addClass(defaultSortOrder);
var changeSortOrder = function () {
var newOrder = element.hasClass('asc') ? 'desc' : 'asc';
element.removeClass('asc desc').addClass(newOrder);
};
element.on('click', changeSortOrder);
scope.$on('$destroy', function () {
element.off('click', changeSortOrder);
});
}
}
});
HTML:
<div class="col-xs-2 sortable" my-sort>
<span>Element 1</span>
</div>
<div class="col-xs-2 sortable" my-sort>
<span>Element 2</span>
</div>
<div class="col-xs-2 sortable" my-sort>
<span>Element 3</span>
</div>
演示:http://plnkr.co/edit/9bf8UG6eJGW5AtlxcSgm?p=preview
好吧,我不建议你通过控制器更改DOM元素,但如果你必须这样做(而不是指令,这是首选),那么你需要获得这样的div
元素:
var $elem = $event.target.parentNode
相关文章:
- 未捕获的语法错误:javascript对象上出现意外的标记ILLEGAL
- 如何修复错误'对象没有't支持属性或方法'getScreenCTM''在Inter
- 数组类型字符串导致类型错误的对象
- Javascript 引用错误 - 在对象内找不到函数
- 是否可以在函数构造函数中识别哪个对象调用它,并在错误的对象调用时中止创建
- 获得错误“;对象没有方法'jScrollPane'"与AngularJS一起使用时
- 清理在构造函数中引发错误的对象
- 角度在ng-repeat(MEAN-Stack)中传递错误的对象
- jQuery ajax() 返回带有错误的对象
- _.assign 仅当属性存在于目标对象中时
- JS针对错误的对象
- InvalidStateError:尝试使用不是或不再是可用 javascript 错误的对象
- 导致控制台中出现未定义错误的对象
- ng jsTree 返回错误的对象作为选定的节点
- 铬错误或编码错误?目标页面中的锚/ID 链接不起作用
- 随机子字符串错误?“类型错误:在对象中找不到函数子字符串.".
- 第三.js自定义几何体光线投射器捕获了错误的对象
- JavaScript 错误:预期对象
- 拼接从 AngularJS 中的 ng-repeat 中删除错误的对象
- 在ng-click中得到错误的目标对象