2013-05-18 5 views
-3

я не могу понять, где я пошло не так с этой простой JavaScriptПростой Javascript не могу понять, где это неправильно

<!DOCTYPE html> 
<html> 
<head> 
<title> </title> 
<script> 
    function changeColor() { 
     var elem = document.getElementById("para1"); 
     if (elem.style.color == black) { 
      elem.style.color = blue 
     } 
     else if (elem.style.color == blue) { 
      elem.style.color = red 
     } 
     else if (elem.style.color == red) { 
      elem.style.color = black 
     } 
    } 
    </script> 
</head> 

<body> 
    <p id="para1"> Some text here</p> 
    <button onclick='changeColor();'>Change!</button> 
    <!-- <button onclick='changeColor("red");'>red</button> --> 
</body> 
</html> 

Осознайте отладки гораздо сложнее с JavaScript, чем VBA - что я использовал его ,

+1

«черные» и другие литералы должны быть заключены в кавычки, т. Е. «Черный». –

+0

Ohhhhh .............. У меня нет других слов. И голосуйте, чтобы закрыть. Как слишком локализован. Сожалею. – VisioN

+0

Насколько сложнее отлаживать JavaScript? Это не может быть проще ... Chrome Developer Tools (доступно при нажатии F12) и FireBug делают в нем большой бит и позволяют использовать «console.log» в любом месте вашего кода, даже сбрасывая объекты и ошибки. Что вы можете хотеть больше? За исключением пошаговой отладки, конечно ... – Kiruse

ответ

2

Вам не хватает котировок вокруг ваших значений цвета.

elem.style.color = 'red'; 
+3

Тем не менее, часто бывает, что строка, которую вы возвращаете из стиля.цвет "при сравнении не является" черным "или" красным ", а' "rgb (0, 0, 0)" или "rgb (255, 0, 0)" "(и это зависит от браузера в браузер). –

+0

@ T.J.Crowder, Интересно ... Я предположил, что вы вернете все, что было ранее установлено. Хорошо знать! – Brad

-1

без кавычек они читаются как переменные, добавить кавычки для проверки этих строк, как

var elem = document.getElementById("para1"); 
    switch(elem.style.color){ 
     case 'black': 
       elem.style.color = 'blue' 
       break; 
     case 'blue': 
       elem.style.color = 'red'; 
       break; 
     case 'red': 
       elem.style.color = 'black'; 
       break; 
    } 
+0

Дело в том, что вы не обязательно возвращаетесь к тому, что вы установили. Вы можете установить «черный», но при чтении позже верните «rbg (0,0,0)» или аналогично. –

+0

Эй, Сэм, я попробовал ваш код, но он не работал на моем браузере Firefox. – extensa5620

3

Есть две проблемы.

Первым из них является тот, который каждый указывал, вы должны использовать строки при присвоении значения цвета т.д .:

elem.style.color = "black"; 

Но второй более тонкий. Строка, которую вы возвращаете с elem.style.color, равна не достоверно "black" или "blue" и т. Д., Даже если это то, что вы назначили. Это может быть "rgb(0,0,0)" или аналогичный.

По этой причине, вы должны отслеживать «текущий» цвет отдельно, например:

function changeColor() { 
    var elem = document.getElementById("para1"); 
    var color = elem.getAttribute("data-color"); 
    if (!color || color == "black") { 
     color = elem.style.color = "blue"; 
    } 
    else if (color == "blue") { 
     color = elem.style.color = "red"; 
    } 
    else if (color == "red") { 
     color = elem.style.color = "black"; 
    } 
    elem.setAttribute("data-color", color); 
} 

Там, я использовал data-* attribute отслеживать цвет я назначенный к элементу, в способ, который я знаю, не будет преобразован в значение RGB. (И я также использовал строки, а не имена переменных, для таких вещей, как "black" и "blue" и т. Д.)

+1

И, наконец, один неопределенный «черный» убежал от вашего – VisioN

+0

@VisioN: Doh! Благодарю. –

+0

Спасибо TJ Crowder! Javascript имеет больше сложностей, чем VBA! Это очень хорошая информация! И я только что выбрал простой пример (подумал, что это просто) из Mozilla DN! – extensa5620

Смежные вопросы