Forum Moderators: open
function setToggles()
{
var tmp;
var inputs=document.getElementsByTagName('input');
var regex=/(?:^|\s)toggle-(\S+)/g;
for(var i=0;i<inputs.length;i++)
{
var e=inputs[i];
if(e.type=='checkbox'&&e.className.indexOf('toggle-')!=-1)
{
var matches=e.className.match(regex);
for(var m in matches)
e.onchange=function() {toggle(matches[m].substring(8),this.checked);};
}
}
}
e.onchange = function(el){
return function() {
toggle(el, this.checked);
}
}(matches[m].substring(8));
function setToggles()
{
var tmp;
var inputs=document.getElementsByTagName('input');
var regex=/(?:^|\s)toggle-(\S+)/g;
for(var i=0;i<inputs.length;i++)
{
var e=inputs[i];
if(e.type=='checkbox'&&e.className.indexOf('toggle-')!=-1)
{
var matches=e.className.match(regex);
for(var m in matches)
e.onchange=function(t) {return function() {toggle(t,this.checked);}}(matches[m].substring(8));
}
}
}
for(var m in matches)
e.onchange=...
}
<!DOCTYPE html>
<head>
<title>Test</title>
</head>
<body>
<div id="div123">123</div>
<div id="div456">456</div>
<div id="div789">789</div>
<input type='checkbox' class='checkbox toggle-div123 toggle-div789'>
<input type='checkbox' class='checkbox toggle-div456 toggle-div000'>
<input type='checkbox' class='checkbox toggle-div000'>
<script type="text/javascript">
function toggle(els, b) {
var i, n;
for (i = 0, n = els.length; i < n; i++) {
alert('toggle(' + els[i].id + ', ' + b + ')');
}
}
function setToggles() {
var DEBUG = true, // set to true for debug alerts (during development)
el, // will hold reference to input element
i, // array index variable
inputs = document.getElementsByTagName('input'),
matches, // will hold array of toggleRegEx matches
n, // will hold the length of array
toggleRegEx = /(?:^|\s)toggle-(\S+)/g;
// iterate through all input elements
for (i = 0, n = inputs.length; i < n; i++) {
el = inputs[i];
// check to see if this is a checkbox that matches our 'toggle' class
if (el.type == 'checkbox' && el.className.indexOf('toggle-') != -1) {
// get the array of toggle matches
matches = el.className.match(toggleRegEx);
if (matches.length > 0) {
// create the onclick event handler using array of matches
el.onclick = (function (matches) {
var elToggle, // will hold reference to dom element
els = [], // will hold array of elements
j, // array index variable
k; // will hold the length of array
for (j = 0, k = matches.length; j < k; j++) {
if (DEBUG) {
alert('adding ' + matches[j].substring(8));
}
elToggle = document.getElementById(matches[j].substring(8));
if (elToggle) {
els.push(elToggle);
}
else if (DEBUG) {
// Attempted to add toggle handler for unknown el
alert('Element not found: [' +
matches[j].substring(8) + ']');
}
}
if (els.length > 0) {
return function() {
toggle(els, this.checked);
};
}
else {
if (DEBUG) {
alert('Assigning empty function to event handler');
}
return function () {};
}
})(matches);
}
}
}
}
setToggles();
</script>
</body>
</html>
function toggle(el,b) {
alert('toggle('+el.id+','+b+')');
}
function setToggles() {
var el,matches;
var inputs=document.getElementsByTagName('input');
var regex=/(?:^|\s)toggle-(\S+)/g;
for(var i=0;i<inputs.length;i++) {
el=inputs[i];
if(el.type=='checkbox'&&el.className.indexOf('toggle-')!=-1) {
matches=el.className.match(regex);
for(var j=0;j<matches.length;j++)
el.onclick=function(old,target) {
if(!target) return old;
if(old) return function() {old.call(this,arguments); toggle(target,this.checked);};
return function() {toggle(target,this.checked);};
}(el.onclick,document.getElementById(matches[j].substring(8)));
}
}
}
Since the checkbox may already have an onclick function the code needs to know how to append a function anyway,
it increases the work done on every click
function addEvent(el, type, fn) {
if (window.addEventListener) {
// This browser supports the standard defined addEventListener, so use it
el.addEventListener(type, fn, false);
}
else if (window.attachEvent) {
// This browser supports IE's attachEvent method
el.attachEvent('on' + type, fn);
}
else {
// fallback to event handler for REALLY old browsers
el['on' + type] = fn;
}
}
addEvent(el, 'click', function () {
// do something
});
else if (window.attachEvent) {
// This browser supports IE's attachEvent method
el.attachEvent('on' + type, fn);
}
else if (window.attachEvent) {
// This browser supports IE's attachEvent method
//actually, is almost definitely IE, have not heard of others mimicking it's stupidity?
el.attachEvent('on' + type, function () { return fn.call(el, window.event)});
}
addEvent(el, 'click', function () {
alert(this);
});