使用 KnockoutJS 取消选中单选按钮
Uncheck radio button with KnockoutJS
我想实现一个清单控件,一次只能选择一个项目。基本上就像一个单选按钮组,唯一的区别是项目可以取消选中。我创建了一个自定义绑定来实现此目的,它 "works" 取消选中单选按钮,但是视图模型中的值未设置为 null。
ko.bindingHandlers.radioCheckbox =
{
init: function (element, valueAccessor, allBindings) {
ko.bindingHandlers.value.init(element, valueAccessor, allBindings);
},
update: function (element, valueAccessor, allBindings) {
(function (element, valueAccessor, allBindings) {
$(element).mousedown(function(e) {
e.preventDefault();
if ($(this).is(':checked')) {
allBindings().checked(null);
} else {
$(this).prop('checked', true);
}
}).click(function(e) {
e.preventDefault();
});
})(element, valueAccessor, allBindings);
}
};
有类似的问题,但是接受的解决方案与我的问题相同。
link
我设法解决了第二个解决方案。我只是更改了 select 函数:
select: function(data) {
if(this.selectedAdmin()==data.id){
this.selectedAdmin(null);
}else{
this.selectedAdmin(data.id);
}
return true;
}
请注意,现在将值设置为空。
我想实现一个清单控件,一次只能选择一个项目。基本上就像一个单选按钮组,唯一的区别是项目可以取消选中。我创建了一个自定义绑定来实现此目的,它 "works" 取消选中单选按钮,但是视图模型中的值未设置为 null。
ko.bindingHandlers.radioCheckbox =
{
init: function (element, valueAccessor, allBindings) {
ko.bindingHandlers.value.init(element, valueAccessor, allBindings);
},
update: function (element, valueAccessor, allBindings) {
(function (element, valueAccessor, allBindings) {
$(element).mousedown(function(e) {
e.preventDefault();
if ($(this).is(':checked')) {
allBindings().checked(null);
} else {
$(this).prop('checked', true);
}
}).click(function(e) {
e.preventDefault();
});
})(element, valueAccessor, allBindings);
}
};
有类似的问题,但是接受的解决方案与我的问题相同。 link
我设法解决了第二个解决方案。我只是更改了 select 函数:
select: function(data) {
if(this.selectedAdmin()==data.id){
this.selectedAdmin(null);
}else{
this.selectedAdmin(data.id);
}
return true;
}
请注意,现在将值设置为空。