每次点击Javascript其他功能

时间:2013-06-23 16:49:22

标签: javascript onclick

我是JavaScript新手,我想每次调用另一个函数,例如:

onclick="on first click a(), then b(), etc "

当然它不会像这样工作但是有选择吗?

谢谢!

3 个答案:

答案 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)

解决方案一

HTML

<button>Click me</button>
的Javascript
// 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]();
    }
}

JSFIDDLE


解决方案二

我建议在HTML中使用data-*属性,例如data-func

HTML

<button data-func="0">1</button>
<button data-func="1">2</button>

纯Javascript

// 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]();
    }
}