Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-未触发要模糊的绑定元素_Javascript_Jquery_Angularjs - Fatal编程技术网

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)
    删除在元素上注册的任何事件侦听器


  • 您可以在指令中处理chidlren
    focus
    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”
    。然后在您的div
    ng 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');
    });