0

是否简单,但需要您的帮助:

我需要在 jQuery 中动态创建按钮和链接。从 XML 加载的数据被放入一个数组中,现在:

您可以单击“类别”“用户”等按钮之一...它会启动一个功能,该功能应该为每个类别 f.ex. 创建一个按钮:让我们创建一个将由这些按钮启动的功能:它将使用 categoryID attr 搜索 XML,其中包含带有“something...”的 txt,并将其添加到#tester:

function clickedCat(cat){
      alert("test btn" + cat); // to check if function started
      // here just some script search 'cat' in XML etc...
    })
}

现在该功能必须由动态创建的按钮 f.ex. 触发:

function showCatName(){
    $("#categories").html(" ");
    for(i=0;i<catArr.length;i++){
    qw = catIDArr[i];
    $("<div id='showCatName"+qw+"'></div>").html("<input id='showCatName"+qw+"' type='button' title='showCatName"+qw+"' value='showCatName"+qw+"' />")
                        .click(function(event){clickedCat(qw)}).appendTo("#categories");
    }
}

但是此处创建的按钮对所有这些按钮都具有相同的值-加载的最后一个 qw...

问:如何让它记住每个 btn 不同的 qw 值?所以 btn[0] 启动 qw[0],btn[1] 启动 qw[1] 等等...

第二件事-同样的问题,但我需要将其输入到 html 链接中:

function showCatName2(){
    $("#categories").html(" ");
    for(i=0;i<catArr.length;i++){
    qw2 = catIDArr[i];
    $("<div id='showCatName"+qw2+"'></div>")
    .html("<a href='#' onclick:clickedCat("+qw2+")> Test btn"+qw2+"</a>")
    .appendTo("#categories2");
    }
}

onclick 似乎根本不起作用...

Q1:如何让它工作,以便动态创建按钮来启动具有不同值的功能?

Q2:像上面一样,但不是按钮,我需要把它放在链接中

提前感谢您的帮助,卢卡斯

4

1 回答 1

0

你有一个关闭问题showCatName()。当你这样说时:

function(event){ clickedCat(qw) }

您正在绑定qw对该函数的引用,但这并不计算 qw. 当qw点击处理程序被触发时,变量被评估,值qw将是循环完成时的值;所有点击处理程序都将具有相同的qw值,因为它们都共享完全相同的变量。通常的解决方案是在构建点击处理程序时强制qw进行评估:

function make_click(qw) {
    return function() { clickedCat(qw); };
}
// ...
function showCatName(){
    $("#categories").html(" ");
    for(i=0;i<catArr.length;i++) {
        qw = catIDArr[i];
        $("<div id='showCatName"+qw+"'></div>")
            .html("<input id='showCatName"+qw+"' type='button' title='showCatName"+qw+"' value='showCatName"+qw+"' />")
            .click(make_click(qw))
            .appendTo("#categories");
    }
}

您可以使用立即执行的内联函数来代替,make_click()但如果您遇到闭包问题,上述内容可能更清楚。

您的第二个不起作用,因为onclick:clickedCat在 HTML 中没有任何意义。也许你的意思是onclick=clickedCat。您可能会遇到qw2这种方法的引用问题。

于 2011-02-21T03:38:30.447 回答