JavaScript作用域:如何创建具有不同值的匿名函数



我有很多按钮,我想以编程方式为每个按钮添加一个onclick函数。我想让这些函数知道它们连接到哪个按钮编号,但我不想解析按钮id来获得编号。必须有更好的方法:

    require(["dojo/dom", "dojo/domReady!", "dojo/on"], function(dom, domReady, on) {
        for (var i = 0; i < 10; i++) {
            on(dom.byId("button"+ i), "click", function(e) {
                console.log("Number: "+ i);
            });
        }
    });

我如何添加一个功能,使其在不这样做的情况下正确输出按钮编号:

console.log("Number: "+ e.srcElement.id.substring(6));

怎么样

for (var i = 0; i < 10; i++) {
    on(dom.byId("button"+ i), "click", (function(number){
        return function(e) {
            console.log("Number: "+ number);
        };
    })(i));
}

您可以通过dojo/_base/lang::partial:实现相同的功能

require([
    "dojo/_base/lang",
    "dojo/dom",
    "dojo/on",
    "dojo/domReady!"
], function(
    lang,
    dom,
    on
) {
    var button_onClick = function(i, event) {
        console.log("Number:", i);
    }
    for (var i = 1; i <= 3; i++) {
        on(dom.byId("button" + i), "click", lang.partial(button_onClick, i));
    }
});​

请参阅jsFiddle上的一个工作示例:http://jsfiddle.net/phusick/KhsXB/

最新更新