Javascript:如果检查输入则为addClassName,如果未选中则为removeClassName

时间:2010-05-14 15:26:43

标签: javascript html input checkbox prototypejs

我正在尝试选择文档的所有li标记并检查它是否为hasClassName('yes'),如果有,则将其删除。但我遇到了类型错误:Object [object HTMLLIElement], has no method 'hasClassName' 错误

这是DOM方法:

document.observe("dom:loaded", function() {
    $(document.body).select('input').each(function(element) {
        element.observe('click', function() {
            init();
        });
        init();
    });

});

前面的代码将使用init函数并检查是否有检查输入并将它们添加为“yes”类名,但是如果我取消检查这些输入,则该类仍然存在。 这是我正在尝试动态的功能(添加和删除类'是');

function init() {
    $(document.body).select('input').each(function(element) {
        if (element.checked) {
            element.up('li').addClassName('yes');
        } 

        if ($(document.body).select('li').hasClassName('yes')) {
            element.removeClassName('yes');
        }
    })
}

你能帮我解决这个函数的最后一部分吗,所以r​​emoveclassname方法可以工作吗?谢谢。

2 个答案:

答案 0 :(得分:1)

$(document.body).select('li')返回一个集合,而不是一个元素,对吧?我认为你想要:

    if (element.hasClassName('yes')) {
        element.removeClassName('yes');
    }

但是,您的逻辑似乎存在缺陷 - 如果检查输入,则首先添加类,然后立即将其删除。你错过了else吗?也许更像是:

function init() {
    $(document.body).select('input').each(function(element) {
        if (element.checked) {
            element.up('li').addClassName('yes');
        }
        else {
            element.up('li').removeClassName('yes');
        }
    })
}

答案 1 :(得分:0)

等一下 - “select”将返回一个元素数组。 “hasClassName”函数是Element上的函数,而不是Array或Enumerable。你错过了“each()”图层。

$$('li').each(function(li) {
  if (li.hasClassName('yes')) li.removeClassName('yes');
});