71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
|
|
/*
|
||
|
|
This is a class which you can attach to a checkbox element.
|
||
|
|
When that element is clicked, it will toggle every checkbox
|
||
|
|
with a specified classname to be the same as the checkbox that was
|
||
|
|
clicked.
|
||
|
|
|
||
|
|
$Id: checkallbutton.js 69 2006-07-14 22:38:26Z mischa $
|
||
|
|
*/
|
||
|
|
|
||
|
|
CheckallButton = new Class(Object, {
|
||
|
|
|
||
|
|
// opts:
|
||
|
|
// class => what class all of the checkboxes have
|
||
|
|
// button => the "check all" button element
|
||
|
|
// parent => [optional] only check boxes that are children of this element
|
||
|
|
init: function (opts) {
|
||
|
|
if ( CheckallButton.superClass.init ) {
|
||
|
|
CheckallButton.superClass.init.apply(arguments);
|
||
|
|
}
|
||
|
|
|
||
|
|
this.button = opts["button"];
|
||
|
|
this.className = opts["class"];
|
||
|
|
this.parent = opts["parent"];
|
||
|
|
this.attachEvents();
|
||
|
|
},
|
||
|
|
|
||
|
|
attachEvents: function () {
|
||
|
|
if (!this.button || !this.className)
|
||
|
|
return;
|
||
|
|
|
||
|
|
DOM.addEventListener(this.button, "click", this.buttonClicked.bindEventListener(this));
|
||
|
|
},
|
||
|
|
|
||
|
|
buttonClicked: function (e) {
|
||
|
|
if (!this.button || !this.className)
|
||
|
|
return;
|
||
|
|
|
||
|
|
var parent = this.parent;
|
||
|
|
if (!parent)
|
||
|
|
parent = document;
|
||
|
|
|
||
|
|
var viewObjects = parent.getElementsByTagName("*");
|
||
|
|
var boxes = DOM.filterElementsByClassName(viewObjects, this.className) || [];
|
||
|
|
|
||
|
|
var checkallBox = this.button;
|
||
|
|
|
||
|
|
for (var i = 0; i < boxes.length; i++) {
|
||
|
|
var box = boxes[i];
|
||
|
|
|
||
|
|
if (!box)
|
||
|
|
continue;
|
||
|
|
|
||
|
|
if (box.checked == checkallBox.checked) continue;
|
||
|
|
|
||
|
|
// send a "clicked" event to the checkbox
|
||
|
|
try {
|
||
|
|
// w3c
|
||
|
|
var evt = document.createEvent("MouseEvents");
|
||
|
|
evt.initMouseEvent("click", true, false, window,
|
||
|
|
0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||
|
|
box.dispatchEvent(evt);
|
||
|
|
} catch (e) {
|
||
|
|
try {
|
||
|
|
// ie
|
||
|
|
box.click();
|
||
|
|
} catch (e2) { }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|