Javascript AngularJS-未触发要模糊的绑定元素
我有一个简单的指示Javascript AngularJS-未触发要模糊的绑定元素,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有一个简单的指示 app.directive('cell', function() { return { restrict: 'C', link: function(scope, element, attrs) { element.bind('click', function() { element.addClass('selected');
app.directive('cell', function()
{
return {
restrict: 'C',
link: function(scope, element, attrs)
{
element.bind('click', function()
{
element.addClass('selected');
});
element.bind('blur', function()
{
console.log('blur');
element.removeClass('selected');
});
}
}
});
而我的单元格
是
<div class="shift">
<div class="cell" ng-repeat="cell in cells"></div>
</div>
单击
绑定正常,但模糊
绑定不正常。它永远不会被触发 仅仅因为你点击了一个div
,并不意味着它就能获得键盘焦点。如果它没有获得键盘焦点(因为它是不可编辑的),它就不能丢失它,因此也不能模糊它
另一种方法可以如下:单击任何
.cell
元素后,从每个元素中删除所选的类,然后将其添加到单击的元素中
例如:
另请参见此
注意事项:
根据您支持的浏览器以及是否使用jQuery,上述代码可能需要修改
另一种方法是在文档上注册一个click
-侦听器,如果单击的元素是.cell
,则从任何元素中删除所选的类。在这种情况下,您需要注意只注册侦听器一次,而不是针对.cell
的每个实例
在范围
被破坏时,总是清理侦听器是一种很好的做法,以防止内存泄漏。您可以使用scope.$on('$destroy',callback)
删除在元素上注册的任何事件侦听器
您可以在指令中处理chidlrenfocus
和blur
事件:
element.children().bind('focus', function() {
element.addClass('selected');
});
element.children().bind('blur', function() {
console.log('blur');
element.removeClass('selected');
});
您是否省略了单元格内容?模糊仅在一个控件具有焦点并丢失到另一个控件时触发。如果无法使用选项卡
访问控件,则无法获得焦点,并且不会出现模糊事件。通常只有输入型控件和按钮才能获得焦点。好的,谢谢!那么,当你点击元素之外的任何地方时,有没有一种方法可以激发一些东西呢?这不需要使用$document
,因为它只会创建无限多的事件~您可以使用mouseleave
来检测鼠标何时移出元素,但您必须在文档上注册一个单击处理程序,并在检测到未超出该元素的单击时触发更改。你想干什么?也许有更好的办法。在我看来,你可以在你的示波器上维护一个“selectedCell”属性,而你div上的ng click就是ng click=“selectedCell=cell”
。然后在您的divng class=“{selected:cell==selectedCell}”
上,当用户单击元素本身时,或者当用户在单元格中的任何输入上设置焦点时,是否需要设置selected
类?假设这类似于excel类型的单元格。因此,单击后,我想选择单元格(只是添加边框)。当你点击其他任何地方(可能是另一个单元格,或其他地方)时,我想取消选择单元格并删除我最初做的边框。但问题是,如果我单击一个单元格,然后单击其他地方(即不是另一个单元格),那么该单元格将不会被取消选择。我希望它被取消选择。
element.children().bind('focus', function() {
element.addClass('selected');
});
element.children().bind('blur', function() {
console.log('blur');
element.removeClass('selected');
});