为广播分配相同的名称,javascript中的复选框

时间:2012-07-19 10:39:01

标签: javascript jquery html nested-loops

我创建了一个嵌套的ul li树。我希望每个li节点之前有一个收音机或复选框控件。为此我每个李有一个class="single/multiple"。现在我创建了一个jquery嵌套函数,它扫描所有的li并附加一个radio或一个checkbox控件。它工作正常。

JQUERY:

var count = 0;
$(function(){
    AddCBRadNodes($("#tree").children("ul"));
});


function AddCBRadNodes(node) {
    count = count+1;
    $(node).children("li").each(function() {
        if($(this).hasClass("single")) {
            $(this).prepend("<span><input type='radio' name='rad_"+count+"' /></span>");
        }
        else if($(this).hasClass("multiple")) {
            $(this).prepend("<span><input type='checkbox' name='cb_"+count+"' /></span>");
        }

        //Nesting here
        if($(this).children("ul").children("li").size() > 0) {
            AddCBRadNodes($(this).children("ul"));
        }
    });
}​

小提琴在这里 - http://jsfiddle.net/ashwyn/Y46Dw/1/

我无法做的是每个li级别都需要一个唯一的名称。例如。 A1,A2,A3应具有相同的名称,但名称不同于其他li。如果您将分析firebug中的控件,那么您将了解我当前的jquery正在将rad_1分配给P1rad_6分配给P2P3。这是我迫切需要帮助的逻辑问题。提前谢谢。

3 个答案:

答案 0 :(得分:1)

count变量移出递归函数的范围

在递归调用之前递增count

http://jsfiddle.net/Y46Dw/10/

修改...

要在同一级别保持相同的名称 -

如果您将count作为参数传递给函数,该怎么办?

喜欢这个......

http://jsfiddle.net/Y46Dw/13/

答案 1 :(得分:0)

始终注意你做什么和什么时候 移动

var count = 0;

到代码的第一行 和

count = count+1;

里面

 $(node).children("li").each(function() {

您需要在执行任何其他操作之前设置初始值,并在每次使用它时增加它。

答案 2 :(得分:0)

简化jquery以仅显示无线电。

这是工作小提琴。

http://jsfiddle.net/ashwyn/Y46Dw/14/

如果有一个以前的李兄弟,那么我复制了这个名字,否则我已经增加了计数。