【问题标题】:Angularjs ng-repeat: check boxes are colored black in IE10Angularjs ng-repeat:复选框在 IE10 中为黑色
【发布时间】:2015-05-13 08:49:16
【问题描述】:

我注意到在 IE10 中,复选框的背景颜色填充为黑色,然后转回白色。当我使用 ng-repeat 进行排序时,IE10 似乎不会触发将复选框背景颜色变回白色/正常颜色的事件。

这是对复选框进行 ng-repeat 的 HTML,并根据状态和名称过滤它们:

<div ng-repeat="item in (items | orderBy:['!status','itemName'])">
       <input type="checkbox" ng-click="itemClickEvent($event, item.itemId)" ng-model="item.status"/>
</div> 

已经绑定到点击事件的控制器方法:

 $scope.itemClickEvent = function ($event, itemId) {
                var checkbox = $event.target;
                var checkboxState = checkbox.checked;
                if (checkboxState) {
                    $scope.items = itemsFactory.doSomething(itemId);
                } else {
                    $scope.items = itemsFactory.doAnotherthing(itemId);
                }
        };

IE10版本:IE10.0.9200.17229

Angularjs 版本:AngularJS v1.2.23

问题截图:

有人可以帮我吗?

【问题讨论】:

  • 你能提供一个 JSFiddle 的例子吗?
  • 这与这些复选框的颜色有什么关系?在我看来那是 CSS,而不是 JavaScript。
  • 不正确,浏览器会覆盖大多数复选框样式,因此这实际上是一个 javascript 问题。对于一个是白色的,其余的都是黑色的,我仍然有点困惑。是什么让你进入/离开每个州。您在控制台日志中看到任何内容吗?当您必须在事件侦听器中返回 true 时,我已经看到过这样的事情,但我认为 angular 不会对此进行处理。除了所有这些,升级你的角度也可能很好。
  • 什么?这没有任何意义。无论发生什么,它都来自一些 OP 没有向我们展示的代码/标记。要么有一些其他的 JS 代码改变了一些东西 要么 有一些 CSS 这样做。我再说一遍 - styleclass 或者这些复选框上的 disabled 属性没有任何变化。
  • 还有一个关于类似问题的错误报告:connect.microsoft.com/IE/feedback/details/835620/…(因无法修复而关闭)

标签: angularjs checkbox internet-explorer-10 ng-repeat angularjs-orderby


【解决方案1】:

我能够通过一个小变通方法解决这个问题。我创建了一个 AngularJS 指令来更新 css 并执行预期的任务。

指令:

Angular.directive('directives.checkbox', [])
    .directive('checkBox', [function () {
        return {
            restrict: 'E',
            require: 'ngModel',
            replace: true,
            template: '<span class="icon-xxs iconUnCheck"></span>',
            scope:{
                checkboxCallbackFunction: '=',
                linkId: '=',
                checkStatus: '='
            },
            link: function (scope, elem, attrs, ctrl) {

                var isCheckboxChecked = false;

                function toggleCheckBoxIcon() {
                    isCheckboxChecked = !isCheckboxChecked;
                    scope.checkStatus = isCheckboxChecked;
                    if (isCheckboxChecked) {
                        elem.removeClass('icon-xxs iconUnCheck');
                        elem.addClass('icon-xxs iconCheck');
                    } else {
                        elem.removeClass('icon-xxs iconCheck');
                        elem.addClass('icon-xxs iconUnCheck');
                    }
                }


                elem.bind('click', function () {
                    scope.$apply(function () {
                        toggleCheckBoxIcon();
                        scope.checkboxCallbackFunction(scope.linkId, isCheckboxChecked);
                    });
                });

            }
        }
    }]);

但使用此解决方案时,我遇到了性能问题。当用户选择超过 5 个复选框时,需要一些时间来检查新的复选框。不知何故,这解决了复选框着色的问题。

【讨论】:

    【解决方案2】:

    我会从使用ng-change 开始,而不是这里有一个做某事similar 的plunker。不幸的是,我目前正在使用的计算机上有 IE 8,但无法确认:-(。

    我真的会避免使用 ng-checkbox 我认为这是我以前使用的 is the one

    这是我想出来的

    <div ng-repeat="box in checks">
      <input type="checkbox" ng-model="box.checked" ng-change="check(box)">{{box.name}}</input>
    </div>
    

    JS

    app.controller('MainCtrl', function($scope) {
      $scope.name = 'World';
      $scope.checks = [ 
        {
          name: "Test 1",
          checked: false
        },
        {
          name: "Test 2",
          checked: true
        },
        {
          name: "Test 3",
          checked: false
        }
      ]
      $scope.check = function(box){
        if (box.checked) {
          alert(box.name + "was checked!");
          // $scope.items = itemsFactory.doSomething(itemId);
        } else {
          alert(box.name + "was unchecked!");
          // $scope.items = itemsFactory.doAnotherthing(itemId);
        }
      }
    });
    

    基本上我的猜测是它与$event有关

    【讨论】:

    • 再次,ng-clickng-change 与某物的样式有什么关系?是的,您可以编写一些代码来添加类或更改 click/change 回调中的某些样式,但是 OP 的代码或您的代码都不会这样做。
    • 看看我的 plkr 我添加了一个背景颜色来显示它在输入上不起作用。这与 jquery 事件有关
    • 您好@Jackie,感谢您的回复。我创建了一个自定义指令来满足我的要求。
    猜你喜欢
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2015-08-29
    • 2017-09-13
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多