JQuery 点击路过参考

JQuery Click Passing By Ref

我正在调用 initListeners 以将侦听器附加到许多具有 r#c# ID 的元素。该事件应触发对另一个函数的调用,该函数采用两个参数来标识元素 r# 和 c#。

出于某种原因,对于所有单元格,我只能从中得到 8:8...我猜这是一个引用问题。谁能提出修复建议?

ModelBoard.prototype.initListeners = function() {

    var r=0, c=0;

    for(r=0;r<=7;r++) {
        for(c=0;c<=7;c++) {
            $("#r" + r + "c" + c).click(function(){
                board.click(r, c);
            });
        }
    }
}

ModelBoard.prototype.click = function(r,c) {
    alert(r + ":" + c);
}

尽管所描述的问题与 JavaScript closure inside loops – simple practical example

重复

在不更改任何标记的情况下,您可以执行类似

的操作
ModelBoard.prototype.initListeners = function () {

    function clickHandler() {
        var match = this.id.match(/r(\d+)c(\d+)/);
        board.click(match[1], match[0]);
    }

    var r, c;

    for (r = 0; r <= 7; r++) {
        for (c = 0; c <= 7; c++) {
            $("#r" + r + "c" + c).click(clickHandler);
        }
    }
}

ModelBoard.prototype.click = function (r, c) {
    alert(r + ":" + c);
}

一个更合适的解决方案是向所有需要点击处理程序定位的元素添加一个通用的 class(如 rc),并将该 class 用于 select那些元素

ModelBoard.prototype.initListeners = function () {
    $(".rc").click(function () {
        var match = this.id.match(/r(\d+)c(\d+)/);
        board.click(match[1], match[0]);
    });
}