排他的バッファー処理?(これはごみ)
検証もしていない。書き綴っただけ。
(function () { function ExclusiveBuffer (length) { this.buffer = [ ]; this.max = length - 1; this.point = 0; } var add = function (data) { var result; for (var i = 0; i < this.point; i++) if (this.buffer[i] === data) return null; this.buffer.push (data); if (this.point === this.length) { return this.buffer.shift (); } this.point += 1; }; var del = function (data) { for (var i = 0; i < this.point; i++) if (this.buffer[i] === data) { this.buffer.splice (i, 1); this.point -= 1; return true; } return false; }; var init = function (length) { if (1 > arguments.length || isNaN (length) || 1 > length) return null; return new ExclusiveBuffer (length); } ExclusiveBuffer.prototype.del = del; ExclusiveBuffer.prototype.add = add; ExclusiveBuffer.init = init; this.ExclusiveBuffer = ExclusiveBuffer; })();
checkboxの選択数制限と排他処理について
http://oshiete.goo.ne.jp/qa/6470562.html
<!DOCTYPE html> <title></title> <body> <form action="#"> <p id="hoge" onclick="hogeCheck(event)"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> </p> <p id="huga" onclick="hugaCheck(event)"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> <input type="checkbox"> </p> </form> <script type="application/javascript;version=1.8"> function ExclusiveCheckboxChecker (group, length) { var checkboxs = group.querySelectorAll ('input[type="checkbox"]:checked'); var buffer = []; Array.forEach (checkboxs, function (c) { (buffer.length < length) ? buffer.push (c) : c.checked = false }); return function (evt) { var checkbox = evt.target; var func = (function (b) b !== checkbox); ('checked' in checkbox) ? (checkbox.checked) ? (buffer.every (func)) ? let (d = buffer.push (checkbox)) (length < buffer.length) ? (buffer.shift ()).checked = false : null : null : buffer = buffer.filter (func) : null; } } var hogeCheck = ExclusiveCheckboxChecker (document.querySelector('#hoge'), 2); var hugaCheck = ExclusiveCheckboxChecker (document.querySelector('#huga'), 3); </script>