Javascript: addClassName, если вход проверен, и removeClassName, если он не отмечен - PullRequest
0 голосов
/ 14 мая 2010

Я пытаюсь выбрать все теги 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', но если я сниму флажок с этих входов, класс останется. Это функция, которую я пытаюсь сделать динамической (добавить и удалить класс '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');
        }
    })
}

Вы можете помочь мне решить последнюю часть этой функции, чтобы сработал метод removeclassname? Спасибо.

Ответы [ 2 ]

1 голос
/ 14 мая 2010

$(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');
        }
    })
}
0 голосов
/ 14 мая 2010

Подождите секунду - этот «выбор» будет возвращать массив элементов. Функция hasClassName является функцией непосредственно для Element, а не для Array или Enumerable. Вам не хватает слоя «each ()».

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