Почему методы .setAttribute () и .removeAttribute не работают в моем коде JavaScript?

0

Я создал небольшую карточную игру, как показано ниже:

Изображение 174551

После того, как пользователь вводит правильный ответ в текстовое поле, слово "Правильно!" должен появиться в цвете зеленого цвета жирным шрифтом, а затем атрибуты CSS должны быть удалены вскоре после этого. Вот HTML для области ввода:

<div>
    <input type="text" id="answer" style="width: 80%; height: 30px;" placeholder="Enter your answer..." onkeyup="checkAnswer(this,event);" autofocus><br>
</div>  

Это соответствующий javascript, который должен выполнить действие, как описано выше:

function checkAnswer(input, event){
    if(event.keyCode == 13){
        var answer = document.getElementById("answer").value.toLowerCase();
        var answer_style = document.getElementById("answer");
        for(var i = 0; i<qs.length; i++){
            if(answer == qs[cardIndex]["a"].toLowerCase()){
                **input.setAttribute("style", "color:green; font-weight:bold;");**
                input.value = "Correct!";
                setTimeout(function(){input.value="";},1000);
                **input.removeAttribute("style");**
            }else{
                input.value = "Incorrect!";
                setTimeout(function(){input.value="";},1000)
            }
        }
        if(input.value == "Correct!"){
            nextCard();
        }
    }
}

Все работает в функции checkAnswer, кроме методов setAttribute и removeAttribute, которые были отмечены в фрагменте кода. Я попытался поместить метод removeAttribute после цикла for, и это не сработает. Если я не включаю метод removeAttribute, работают методы setAttribute, но я не хочу, чтобы текст оставался зеленым.

Если бы кто-нибудь мог помочь мне в этом, это было бы здорово!

Если вам нужна дополнительная информация, чтобы понять вопрос, не стесняйтесь спрашивать!

Спасибо!

  • 1
    Должен ли removeAttribute входить в ваш обратный вызов setTimeout ?
Теги:

4 ответа

1
Лучший ответ

Вы удаляете атрибут style сразу после его добавления. Удаление должно быть запланировано позже (т.е. перейти к функции, переданной в setTimeout), так же как input.value=""; делает.

if(answer == qs[cardIndex]["a"].toLowerCase()){
    input.setAttribute("style", "color:green; font-weight:bold;");**
    input.value = "Correct!";
} else{
    input.value = "Incorrect!";
}
setTimeout(function(){
    input.value = "";
    input.removeAttribute("style");
}, 1000);
  • 0
    Спасибо за помощь мне!
0

Поместите input.removeAttribute внутри функции setTimeout:

            setTimeout(function(){input.value="";input.removeAttribute("style");},1000);

Это удалит стиль на 1 секунду позже.

0

Вы устанавливаете атрибут и удаляете его в тот же момент. Если цель состоит в том, чтобы удалить ее после задержки на одну секунду, то что-то вроде:

setTimeout(function(){
    input.value="";
    input.removeAttribute("style");
},1000);
0

Я думаю, input.removeAttribute("style"); удаляет весь исходный стиль. другим простым способом, который я бы предложил, является назначение некоторого класса CSS и определение стиля, основанного на классе. Не может быть полезно использовать методы setAttribute и removeAttribute, но дает вам те же функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню