为什么这两个阶段不会在小提琴中移动:http://jsfiddle.net/WH7Kf/43/
function phase_switch(){
var phase;
clicker = document.getElementById("click");
phase=1
switch (phase) {
case 1:
clicker.onclick = do_this;
break;
case 2:
clicker.onclick = do_that;
break;
}
function do_this (){
alert("this");
phase==2;
}
function do_that (){
alert("that");
phase==1;
}
}
window.addEventListener("load", phase_switch());
你可能会说第一阶段是唯一一个被解雇的阶段。为什么不进行第二阶段的解雇?
答案 0 :(得分:2)
你可以做得更简单:
var clicker = document.getElementById("click");
clicker.onclick = do_this;
function do_this (){
alert("this");
clicker.onclick = do_that;
}
function do_that (){
alert("that");
clicker.onclick = do_this;
}
答案 1 :(得分:2)
从一开始就有一些语法问题:
1)小提琴已经设置为执行JavaScript代码onLoad
;检查侧栏是否有不同的选项。
2)您缺少变量声明。省略var
时,变量变为全局变量,并且可以在函数外部访问;你不想要这个。
3)=
是赋值,==
是相等,===
是严格相等。查找more info
4)我认为你过于复杂。尝试分开关注点。创建一个需要元素和消息的函数,并在事件处理程序中执行逻辑 。您可以跟踪标志以在存储在阵列中的两个不同消息之间切换。例如:
var clicker = document.getElementById("click");
/**
* @param el DOM element
* @param msgs Array containing 2 messages
*/
function phaseSwitch(el, msgs) {
var flag = false;
el.addEventListener('click', function() {
alert(msgs[+flag]); // casts flag to index (0|1)
flag = !flag; // invert flag
});
}
phaseSwitch(clicker, ['hello', 'bye']);
答案 2 :(得分:0)
窗口加载事件在页面生命周期中发生一次,您将在窗口加载事件中绑定单击处理程序,该事件将执行一次。所以phase
第一次的值为1,因此当您点击按钮do_this
时将始终执行