2013-04-16 16 views
0

Я новичок в яваскрипт и я начал с простой задачей написания небольшой скрипт .. Где я ожидавшую строку, которая будет отображаться осуществляется с помощью кнопки переключения мыши ...Почему функция переключения не работает должным образом?

<!DOCTYPE html> 
<html> 
<body> 


<button onclick="foo()">Foo</button> 
<button onclick="toggle()">Toogle</button> 
<p id="demo"></p> 


<script> 
    var toggle = false;//set the desired initial value to toggle flag 
    var x = ""; 

    function toggle() { 
     alert("ENTERED Toggle"); 
     toggle = !toggle; 
     x= toggle? "Toggle set to true. " : ""; 
    } 

    function foo() {`enter code here` 
     alert("ENTERED Foo"); 
     var y = "Food pressed"; 
     y = x + y; 
     document.getElementById("demo").innerHTML=y; // display the x value 
    } 
</script> 

</body> 
</html> 

Ожидаемое: когда отображается только поле foo clicked alert и нажимая «OK», просто «Foo нажал». должен отображаться. Если щелкнуть один раз, а затем щелкнуть foo, тогда «Toggle установите значение« true ». Foo нажато» {два предупреждения появляются в этом процессе} должны быть отображены, и снова нажата кнопка Toggle и foo нажата, флаг переключения переключается и только «Foo нажал». и это следует за этим .....

Фактический результат: только работа с щелчком правой кнопкой мыши и щелчок переключения не работают вообще.

Может ли кто-нибудь пролить свет на это?

+0

, где все в порядке – PSR

+0

Вы еще спросили отладчика браузера? - F12 для IE, Ctrl-Shift-I для FF, Chrome и Opera. – enhzflep

+1

Пожалуйста, изучите [как ** debug ** JavaScript] (http://www.netmagazine.com/tutorials/javascript-debugging-beginners). –

ответ

2

У вас есть конфликтующие имена. Функция toggle заменяет переменную toggle. Это связано с тем, что в ECMAScript (Javascript) можно передавать функцию, не добавляя круглые скобки, то есть функции first-class citizen.

В качестве примера на этом:

x = alert; //"x" is now the same function as "alert" 
x("Hej"); 

Ваше определение функции toggle поэтому эквивалентна этому заданию:

var toggle = function() { 
    alert("ENTERED Toggle"); 
    toggle = !toggle; 
    x= toggle? "Toggle set to true. " : ""; 
} 

Решение состоит в том, чтобы дать либо функцию или переменную другое имя.

+1

Vikstrom: большое спасибо. он работает сейчас. Я не знал, что у меня нет функции и переменной с тем же именем ... –

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