JQuery点击传递参考

时间:2015-03-04 07:08:10

标签: javascript jquery click

我正在调用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);
}

1 个答案:

答案 0 :(得分:1)

即使描述的问题与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);
}

更合适的解决方案是将一个公共类(如rc)添加到需要由click处理程序定位的所有元素,并使用该类来选择这些元素

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