关于javascript:如何为onclick事件返回两个函数

how to return two functions for onclick event

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I pass the value (not the reference) of a JS variable to a function?

我有几个链接(var a [])和onclick事件。 到目前为止,通过使用一个函数,这很好用:

1
2
3
4
5
6
7
8
9
10
function setCurrentImage(x) {
    return function() {
        alert("Image:"+x);
        return false;
    }
}

for(var i = 0; i < a.length; i++) {
    a[i].onclick = setCurrentImage(i);
}

问题是,我需要两个功能。 而这段代码不起作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function setCurrentImage(x) {
    return function() {
        alert("Image:"+x);
    }
}

function setCurrentNote(x) {
    return function() {
        alert("Note:"+x);
    }
}

for(var i = 0; i < a.length; i++) {
    a[i].onclick = function() {
        setCurrentImage(i);
        setCurrentNote(i);
        return false;
    }
}

这段代码有什么问题? 提前致谢 :)


您调用的每个函数都返回一个函数,但实际上并没有执行任何操作。
你永远不会调用他们返回的函数。

一旦你解决了这个问题,你就会遇到另一个问题; 所有内联处理程序共享相同的i变量。
你需要把它包装在IIFE中。


扩展SLaks的答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function setCurrentImage(x) {
    alert("Image:"+x);
}

function setCurrentNote(x) {
    alert("Note:"+x);
}
function setOnclickHandler(x) {
    return function() {
        setCurrentImage(x);
        setCurrentNote(x);

        return false;
    };
}

for(var i = 0; i < a.length; i++) {
    a[i].onclick = setOnclickHandler(x);
}