radiobutton + checkbox mix
Нужен элемент, который смесь радиобаттона и чекбокса.
Т.е. из ряда вариантов можно выбрать только один (как у радиобаттона), но с выбранного элемента можно снять выделение (как у чекбоксов). Делаю через радобаттоны, навешиваю на них прослушивание клика, если елемент checked - делаю его не checked, вроде всё логично: <input type="radio" ng-model="someData" value="0" radio-check>
app.directive("radioCheck", function() {
return {
require: "ngModel",
link: function(scope, elem, attrs, ngModel) {
elem.on("click", function(e) {
if (elem.prop("checked") === true) {
ngModel.$modelValue = undefined;
ngModel.$viewValue = false;
}
});
}
}
});
Что я делаю не так? |
можно манипулировать не checked-атрибутом, а присвоить модели someData значение null - тогда все radio-инпуты станут "uncheched", т.е. ни один не будет выбран (в том и фишка ангуляра- работать с объектами, а не с html)
http://plnkr.co/edit/4xossl8AglvPMRriV9XN?p=preview кстати, elem.prop("checked") всегда возвращает true |
Спасибо, работает.
А как можно сделать вашу директиву универсальной? Что бы без привязки к значеню ng-model Т.к. у разных групп радиобаттонов ng-model будет разным Пробовал заменить scope.radio = null; на ngModel.$modelValue = null; не работает |
ngModel.$setViewValue(null); ngModel.$render(); scope.$apply() |
ребята может кто подскажет как такое на jquery реализовать
|
Цитата:
<script>
var uncheckRadio = (function() {
var current;
return function(element) {
if(current == element) {
element.checked = false;
current = null;
} else
current = element;
}
})();
</script>
<form>
<div>
<input type="radio" name="product" value="1" onclick="uncheckRadio(this);" />
<span>Шоколад</span>
</div>
<div>
<input type="radio" name="product" value="2" onclick="uncheckRadio(this);" />
<span>Мороженое</span>
</div>
<div>
<input type="radio" name="product" value="3" onclick="uncheckRadio(this);" />
<span>Груша</span>
</div>
<div>
<input type="radio" name="product" value="3" onclick="uncheckRadio(this);" />
<span>Вафля</span>
</div>
</form>
|
| Часовой пояс GMT +3, время: 14:37. |