Angularjs ng repeat:IE10中的复选框为黑色
我注意到,在IE10中,复选框的背景色填充黑色,然后转换回白色。当我使用ng repeat进行排序时,IE10似乎不会触发将复选框背景颜色变回白色/正常颜色的事件 以下是对复选框重复ng的HTML,并根据状态和名称对其进行筛选:Angularjs ng repeat:IE10中的复选框为黑色,angularjs,checkbox,internet-explorer-10,ng-repeat,angularjs-orderby,Angularjs,Checkbox,Internet Explorer 10,Ng Repeat,Angularjs Orderby,我注意到,在IE10中,复选框的背景色填充黑色,然后转换回白色。当我使用ng repeat进行排序时,IE10似乎不会触发将复选框背景颜色变回白色/正常颜色的事件 以下是对复选框重复ng的HTML,并根据状态和名称对其进行筛选: <div ng-repeat="item in (items | orderBy:['!status','itemName'])"> <input type="checkbox" ng-click="itemClickEvent($eve
<div ng-repeat="item in (items | orderBy:['!status','itemName'])">
<input type="checkbox" ng-click="itemClickEvent($event, item.itemId)" ng-model="item.status"/>
</div>
IE10版本:IE10.0.9200.17229
Angularjs版本:Angularjs v1.2.23
问题截图:
有人能帮帮我吗?我会先用它来代替,这里有一个能做点什么的plunker。不幸的是,我目前使用的计算机上有IE 8,无法确认:- 我真的会避免使用ng复选框,我想这是我以前的基础 这是我想到的
<div ng-repeat="box in checks">
<input type="checkbox" ng-model="box.checked" ng-change="check(box)">{{box.name}}</input>
</div>
基本上,我的猜测是它与$event有关,我可以通过一个小的解决方法来解决这个问题。我创建了一个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个以上的复选框时,需要一些时间来选中新的复选框。不知何故,这解决了复选框变彩色的问题 你能提供一个JSFIDLE之类的例子吗?这和那些复选框的颜色有什么关系?在我看来,这是CSS,不是JavaScript。不是真的,浏览器会覆盖大多数复选框样式,因此这实际上是一个JavaScript问题。我仍然有点困惑,一个是白色的,其余的是黑色的。是什么让你进出每个州。你在控制台日志中看到什么了吗?我在eventlistener中看到过这样的情况,当你必须返回true时,但我不认为angular会这么做。把这些都放在一边,也许升级你的角度也不错。什么?这毫无意义。无论发生什么,它都来自OP没有向我们展示的一些代码/标记。要么是其他JS代码在改变什么,要么是CSS在改变什么。我重复一遍-这些复选框上没有任何更改样式、类或禁用属性的内容。还有一个类似的错误报告:Closed as will not fixer,ng click和ng change与某些内容的样式有什么关系?是的,您可以编写一些代码,在单击/更改回调中添加类或更改某些样式,但OP的代码或您的代码都不会这样做。看看我的plkr,我添加了一个背景色来显示它对输入不起作用。这与jquery事件有关Hello@Jackie,谢谢你的回复。我创建了一个自定义指令来满足我的要求。
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);
}
}
});
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);
});
});
}
}
}]);