我是JavaScript新手,我想每次调用另一个函数,例如:
onclick="on first click a(), then b(), etc "
当然它不会像这样工作但是有选择吗?
谢谢!
答案 0 :(得分:3)
将功能存储在合理的数据结构中。由于您希望按顺序访问它们,请将其设为数组。
function a() { };
function b() { };
function c() { };
function d() { };
var myFunctions = [a, b, c, d];
然后跟踪下一个要调用的功能:
var nextFunction = 0;
然后,每次调用其中一个函数时,递增指针。
function myFunctionSwitcher() {
myFunctions[nextFunction]();
nextFunction = nextFunction + 1;
}
然后,将其用作事件处理程序:
document.getElementById('whatever').addEventListener('click', myFunctionSwitcher);
添加一些逻辑,以便在nextFunction
到达数组末尾时重置为0
。
答案 1 :(得分:1)
是的,当然有。始终调用相同的函数,让被调用的函数决定接下来会发生什么:
<script>
var count = 0;
function myClickHandler() {
switch(count) {
case 0:
a();
break;
case 1:
b();
break;
}
count++;
}
</script>
<div onclick="myClickHandler()"></div>
当然,这是最易读的初学者版本。有关更高级的示例,请参阅昆汀的答案。
答案 2 :(得分:0)
<button>Click me</button>
// array of functions
var functions = [
function () { alert("First function") },
function () { alert("Second function") },
function () { alert("Third function") },
function () { alert("Clicked more than three times.") }
];
// all buttons
var anchors = document.getElementsByTagName('button');
// the counter
var i = -1;
// detect the click for first button
anchors[0].onclick = function() {
// call the functions using i variable
if (i < 3) {
// increment i
functions[++i]();
}
else {
functions[3]();
}
}
我建议在HTML中使用data-*
属性,例如data-func
。
<button data-func="0">1</button>
<button data-func="1">2</button>
// an array of functions
var functions = [
function () { alert("First function") },
function () { alert("Second function") }
];
// all buttons
var anchors = document.getElementsByTagName('button');
// detect click for each button
for(var i = 0; i < anchors.length; i++) {
var anchor = anchors[i];
anchor.onclick = function() {
// get data-func attribute
var foo = parseInt(this.getAttribute("data-func"));
// run the function from array
functions[foo]();
}
}