JQuery .click不像我期望的那样工作.为什么?

RJu*_*iao 2 javascript jquery jquery-mobile

为什么这个函数不适用于jquery-mobile?

当我点击任何元素时,它会触发警报("单元Nº"+60)

function insertOnClick(){
    for (j = 0; j < 6; j++) {
        for (i = 1; i < 11; i++) {
            n = 10 * j + i;
            el = "#num" + n;
            $(el).click(function() {
                alert("cell nº"+n);
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

AD7*_*six 6

因为写入的n将始终是您为该变量分配的最后一个数字 - 它将是执行单击处理程序时的值,而不是您定义该函数的值.

使用封闭物

你需要使用一个闭包来实现你想要的:

function insertOnClick(){
    for (j = 0; j < 6; j++) {
        for (i = 1; i < 11; i++) {
            n = 10 * j + i;

            (function(number) {

                el = "#num" + number;
                $(el).click(function() {
                    alert("cell nº"+number);
                });

            }(n));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

好主意

但是,使用单个处理程序会更好:

$('someselector').click(function(e) {
    var number = $(this)[0].id.replace('num', '');
    alert("cell nº" + number);
});
Run Code Online (Sandbox Code Playgroud)