循环中的Javascript动态连续ID与它在html中出现的次数有关

Javascript dynamic consecutive ID within a loop in relation to the number of times it appears th in html

本文关键字:html 动态 Javascript 连续 ID 循环      更新时间:2023-09-26

我正在使用"数据表",我想循环我根据文档中出现的"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) } ) ;
    } 
} );
您需要

创建 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);
} 

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