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, время: 02:23. |