Почему Javascript не получает доступ к информации о классе для этого html-элемента?

#javascript

#javascript

Вопрос:

В моем HTML для моего файла у меня есть div с идентификатором «divNavyBox». Код приведен ниже.

 <div id="divNavyBox" class="box" onmouseover="animated.doAnimation()"></div>
  

Обратите внимание, что при наведении курсора мыши на него выполняется doAnimation() из var animated.

 var animated = {

el : document.getElementById("divNavyBox"),

doAnimation : function() {
    if (el.className=="box") {

        el.className="boxAlt";
    }
    if (el.className=="boxAlt") {
        el.className="box";
    }

}

};  
  

Я хочу, чтобы он переключался между этими двумя классами cs после выполнения метода doAnimation. Однако это ничего не делает. Я поместил инструкцию alert внутри if (el.className=»box», и она не вызывалась при выполнении функции, хотя класс действительно ЯВЛЯЕТСЯ box. Два CS-класса, которые я хочу использовать, перечислены ниже:

 .box {

    width: 100px;

    height: 100px;

    background-color: navy;

}
.boxAlt {
width: 100px;
height: 100px;  
background-color: red;
}
  

Почему логический оператор el.className=»box» продолжает возвращать false?

Ответ №1:

здесь вы присваиваете boxAlt, если current = box

 if (el.className=="box") {
    el.className="boxAlt";
}
  

здесь вы переключаетесь обратно, если current имеет значение boxAlt что всегда верно, если класс был box с самого начала.

 if (el.className=="boxAlt") {
    el.className="box";
}
  

Измените ее на что-то вроде:

 doAnimation : function() {
    el.className = el.className == "box" ? "boxAlt" : "box";
}
  

Ответ №2:

В вашем коде по крайней мере три проблемы:

Интересно, почему существует ; before onmouseover .

Затем вы используете el.className="box" в if() , который присваивает "box" className . Используйте == для сравнения.

Наконец, el.style.className не определено.

Комментарии:

1. Спасибо за предложения. Я исправил эти три проблемы, и теперь они помещены в исходное сообщение. Несмотря на то, что я исправил эти три проблемы, функция doAnimation по-прежнему не изменяет класс divNavyBox.

2. Добавить alert(typeof el) в качестве первой команды в doAnimation . Вероятно, это undefined

Ответ №3:

el.className = "box" это не логический оператор, это присваивание.

el.className == "box" является логическим выражением.