改变事件不触发复选框,如果它是由javascript设置的
ng change event not firing on checkbox if it's set by javascript
我为checkbox创建了一个指令,它使图像图层,但问题是它不会触发ng change事件即使输入框的复选值改变了
指令function icheck($timeout,$parse) {
return {
restrict: 'A',
link: function ($scope, element, $attrs, $watch) {
var value = $attrs['value'],
ngModelGetter = $parse($attrs['ngModel']);
return $timeout(function () {
$scope.$watch($attrs.ngModel, function (newValue) {
$(element).iCheck('update');
});
$(element).iCheck({
checkboxClass: 'icheckbox_square-green',
radioClass: 'iradio_square-green'
}).on('ifChanged', function (event) {
var elemType = $(element).attr('type');
if (elemType === 'checkbox' && $attrs.ngModel) {
$scope.$apply(function () {
console.log(event.target.checked)
return ngModelGetter.assign($scope, event.target.checked);
});
}
else if (elemType === 'radio' && $attrs.ngModel) {
return $scope.$apply(function () {
return ngModelGetter.assign($scope, value);
});
}
});
});
}
};
}
HTML下面
<input type="checkbox" class="i-checks" data-icheck ng-change="alert('changed!')" ng-model="chekal" id="chkSelectAll">
任何想法我可以触发ng更改事件甚至点击事件将是好的。
ngChange文档:
当用户改变输入
时对给定表达式求值
如果您想观看模型,请使用$scope.watch
$scope.$watch('chekal', function(newvalue,oldvalue) {
if (newvalue !== oldvalue){
//write code here
}});
我所做的是在属性
中传递函数值<input type="checkbox" class="i-checks" data-icheck data-function="selectAll" ng-model="chekal" id="chkSelectAll">
指令 if (elemType === 'checkbox' && $attrs.ngModel) {
$scope.$apply(function () {
console.log(event.target.checked)
var f = $(event.target).data('function');
console.log(f);
if (f !== "undefined" || f !== "") {
eval('$scope.' + f + '(event)');
}
return ngModelGetter.assign($scope, event.target.checked);
});
}
我用eval来调用函数。以上答案仅供参考,对其他人也有帮助。
我不想增加额外的表,所以在不增加表的情况下就这样做了,用更性能的方式解决了问题。
将icheck
函数更改为directive
,如下所示:
yourapp.directive('icheck', function($timeout,$parse) {
return {
restrict: 'A',
link: function ($scope, element, $attrs, $watch) {
var value = $attrs['value'],
ngModelGetter = $parse($attrs['ngModel']);
return $timeout(function () {
$scope.$watch($attrs.ngModel, function (newValue) {
$(element).iCheck('update');
});
$(element).iCheck({
checkboxClass: 'icheckbox_square-green',
radioClass: 'iradio_square-green'
}).on('ifChanged', function (event) {
var elemType = $(element).attr('type');
if (elemType === 'checkbox' && $attrs.ngModel) {
$scope.$apply(function () {
console.log(event.target.checked)
return ngModelGetter.assign($scope, event.target.checked);
});
}
else if (elemType === 'radio' && $attrs.ngModel) {
return $scope.$apply(function () {
return ngModelGetter.assign($scope, value);
});
}
});
});
}
};
});
将data-icheck
添加为data-i-check
作为输入标签的属性。
<input type="checkbox" class="i-checks" data-i-check ng-change="alert('changed!')" ng-model="chekal" id="chkSelectAll">
$scope.$watch('chekal', function(newvalue,oldvalue) {
if (newvalue && newvalue !== oldvalue){
// here you go
}
});
相关文章:
- 通过Javascript设置Telerik RadTreeView属性,如OnClientNodeExpanded
- 使用javascript设置iframe的高度
- 通过JavaScript设置表单目标
- 如何确定相对较新版本的IE的高度和宽度(IE8不喜欢从JavaScript设置这种样式吗?
- 通过JavaScript设置的表单字段的值不会作为$_POST的一部分传递给PHP脚本
- 如何在Internet Explorer中使用javascript设置cookie
- Javascript设置日期不起作用,显示错误的时间
- iOS Safari Javascript设置超时问题
- 使用Javascript设置库中图像包装器的宽度
- 如何检查日期选择器和时间选择器元素是否使用JQuery/Javascript设置
- 如何使用javascript设置元素旋转和动态观察的动画
- 在 PHP 块中使用 Javascript 设置 HTML 文本框的值(使用 echo)
- 通过javascript设置IE特定的css样式
- Javascript-设置cookie并拉入ID
- ASP从Javascript设置控件值
- 尝试使用window.innerHeight和Javascript设置图像高度
- 使用JavaScript设置整个页面的字体大小
- 使用纯Javascript设置最小高度属性
- 如何通过javascript设置支柱列表2
- 使用 JavaScript 设置 的点击