2

我正在使用“数据表”并且我想循环我根据文档中出现的“th”的数量自动生成 ID 以避免写入:

$("#col1_filter").keyup(function() { fnFilterColumn(0) } ); 
$("#col1_regex").click(function() { fnFilterColumn(0) } ); 
$("#col1_smart").click(function() { fnFilterColumn(0) } ) ;

对于每个生成的 HTML 文档。

这里的原始信息:http: //datatables.net/examples/api/regex.html

我正在尝试使用此代码,但总是有最后一个值:

$(document).ready(function() {     
    $("#global_filter").keyup( fnFilterGlobal );
    $("#global_regex").click( fnFilterGlobal );
    $("#global_smart").click( fnFilterGlobal );

    var dt = $(".table thead th").length;
    alert(dt);
    var j; 
    var w;
    for (var i=0;i<dt;++i)
    {
    j=i;
    k= j+1; 
    alert(j);
    alert(k);
    $("#col"+k+"_filter").keyup(function() { fnFilterColumn(j) } ); 
    $("#col"+k+"_regex").click(function() { fnFilterColumn(j) } ); 
    $("#col"+k+"_smart").click(function() { fnFilterColumn(j) } ) ;
    } 
} );
4

1 回答 1

1

您需要创建 的本地副本j,否则您正在使用共享副本(即,fnFilterColumn(j)指的j是您在每次迭代中更新的相同版本)。为此,您必须围绕j(或调用它i,没关系)创建一个闭包:

for (var i=0;i<dt;++i)
{
    (function(j) {
        var k= j+1; 
        alert(j);
        alert(k);
        $("#col"+k+"_filter").keyup(function() { fnFilterColumn(j) } ); 
        $("#col"+k+"_regex").click(function() { fnFilterColumn(j) } ); 
        $("#col"+k+"_smart").click(function() { fnFilterColumn(j) } ) ;
    })(i);
} 

这是一个简化的小提琴,说明了差异。

于 2013-10-19T23:12:49.900 回答