Javascript 替换复选框和闭包的js代码

Javascript 替换复选框和闭包的js代码,javascript,events,checkbox,closures,prototypejs,Javascript,Events,Checkbox,Closures,Prototypejs,下面的javascript(prototype 1.6)代码隐藏了页面上的所有复选框,并插入了一个带有css样式的div元素和一个click事件作为假复选框。它还查找复选框旁边(或前面)的标签,以触发相同的事件 当我点击div(fake_el)本身时,一切正常,但当我尝试使用标签时,它只工作一次。在那之后,el不会改变——就好像它(el)是一个值参数一样 有什么想法吗 $$('input[type=checkbox]').each(function(el) { if (e

下面的javascript(prototype 1.6)代码隐藏了页面上的所有复选框,并插入了一个带有css样式的div元素和一个click事件作为假复选框。它还查找复选框旁边(或前面)的标签,以触发相同的事件

当我点击div(fake_el)本身时,一切正常,但当我尝试使用标签时,它只工作一次。在那之后,el不会改变——就好像它(el)是一个值参数一样

有什么想法吗

    $$('input[type=checkbox]').each(function(el) {
        if (el.visible()) {
            var fake_el = new Element('div', { className:'checkbox checkbox_' + el.checked });
            var label = (el.next() != null && el.next().tagName === 'LABEL' && el.next().readAttribute('for') === el.id) ? el.next() : undefined;
            label = (el.previous() != null && el.previous().tagName === 'LABEL' && el.previous().readAttribute('for') === el.id) ? el.previous() : label;
            var action = function(el) {
                el.checked = (el.checked) ? false : true;
                fake_el.className = 'checkbox checkbox_' + el.checked;
            }

            fake_el.observe('click', function() { action(el); });
            if (label != null) { label.observe('click', function() { c.log(el); action(el); c.log(el); }); }
            el.insert({ after:fake_el }).hide();
        }
    });

我更改了几个项目,并为此创建了一个。首先也是最重要的是,
c.log
必须更改为
console.log
才能为我工作:)。在那之后,我唯一改变的是如何添加div,因为它不适合我使用
insert
。我设置了一些测试数据然后离开了

编辑:也许在两个复选框之间没有非标签标签标签,它会变得混乱?注意,我在
标签
和下一个复选框之间有一个
br
,也许你需要这样做。

适合我。