2013-01-16 93 views
0

嗨,这实际上是在另一个问题(HERE),它有两个部分。第一部分是通过@epascarello解决的 - 再次感谢,现在只剩下这部分了,我似乎没有得到它。可复制的复选框只返回原始值不重复

我创建了一个可复制div的复选框,在提交时,它仅在控制台中返回一个原始输入值,但没有任何重复值。

任何帮助非常感谢。

JS小提琴:http://jsfiddle.net/dawidvdh/EEd7c/

的jQuery:

//Clone Tracking 
var g_counter = 1; 
var d_counter = 1; 
var dependant = ["dependant"]; 
var group; 
//Clone Tracking 
//General Variables 
var relation_input_groups = ["relation-group-1"]; 
//General Variables 
//Generate variables 
var relation_fields=[0]; 
var relation_input ="<label>Spouse</label>"+ 

        "<input type='checkbox' value='spouse' class='relationship' name='relationship' />" + 
        "<label>own child</label>"+ 

        "<input type='checkbox' value='ownchild' class='relationship' name='relationship' />" + 
        "<label>adopted</label>"+ 

        "<input type='checkbox' value='adopted' class='relationship' name='relationship' />" + 
        "<label>stepchild</label>"+ 

        "<input type='checkbox' value='stepchild' class='relationship' name='relationship' />" + 
        "<label>parent</label>"+ 

        "<input type='checkbox' value='parent' class='relationship' name='relationship' />" + 
        "<label>inlaw</label>"+ 

        "<input type='checkbox' value='inlaw' class='relationship' name='relationship' />" + 
        "<label>brother</label>"+ 

        "<input type='checkbox' value='brother' class='relationship' name='relationship' />" + 
        "<label>other</label>"+ 

        "<input type='checkbox' value='other' class='relationship' name='relationship' />"; 
//Generate variables 
jQuery(document).ready(function(e) { 
    //populate jquery generated fields 
    jQuery(relation_fields).each(function() { 
     jQuery(relation_input).appendTo('#relation-group-1'); 
    }); 
    //populate jquery generated fields 
    //Cloning Function 
    jQuery('#clone').click(function() { 
     clone_dependant(); 
    }); 
    function clone_dependant() { 
     // Store the value of the previous Id to insert the cloned div.. 
     var oldId = g_counter; 
     g_counter++; 
     currentdep ='dependant-'+g_counter; 
     // Clone the Dependant Div and set a new id 
     var $clonedDiv = jQuery('#dependant-1').clone(false).attr('id', 'dependant-'+g_counter); 
     var relation_newDiv = 'relation-group-'+ g_counter; 
     // Find div's inside the cloned object and set a new id's 
     $clonedDiv.find('#relation-group-1').attr('id',"relation-group-" + g_counter); 
     // You don't need to Loop thru the inputs to set the value 
     $clonedDiv.find('input').val(''); 
     $clonedDiv.find('input:checkbox').removeAttr('checked'); 
     // Insert the cloned object 
     $clonedDiv.insertAfter("#dependant-" + oldId); 

     relation_input_groups.push(relation_newDiv); 
    } 
    //Cloning Function 
    //Validation 
//submit function 
$(document).on("click", 'input[type="checkbox"]', function() { 
    jQuery(this).siblings(":checked").removeAttr('checked'); 
}); 

var result = {}; 
var dependants; 
var dep_counter = 0; 
jQuery('#submit').click(function(){ 
    jQuery('.dependant').each(function(k, v){ 
     dep_counter++ 
     dependants = {}; 
     result['dependant'+dep_counter] = [dependants]; 
     dependants['relationship'] = $(v).find('.relationship:checked').val(); 
    }); 
    var jsonData = JSON.stringify(result); 
    console.log(jsonData); 
}); 
}); 

和HTML:

<div id="dependant-1" class="dependant"> 
    <div id="label">relationship:</div> <div id="relation-group-1"></div> 
</div> 

<button id="clone">clone</button> 
<button id="submit">submit</button> 

回答

1

看到这个更新小提琴:http://jsfiddle.net/EEd7c/7/

评论这条线:$clonedDiv.find('input').val('');

同样在submit按钮点击设置dep_counter = 0; ..

+0

嘿,不知道这是否合适,但你的答案通常是平静的辉煌,你可以检查一下:http://stackoverflow.com/questions/14374324/jquery-clone-able-inputs-foreach-overwrites-值/ –

1

你克隆复选框没有分配给它的任何值。确保当它的克隆值设置在网络复选框中时

+0

此注释“//你并不需要环通输入设定值“是您问题的根源。其实是的,你是。你在这里设置为空$ clonedDiv.find('input')。val(''); – WebweaverD

1

这只是因为这些复选框具有相同的name属性。当按下提交按钮时,它会序列化所有表单控件(文本框,单选框,复选框等)的值并发送它们。名称属性应该对所有这些控件都是唯一的。

在您的代码中,所有这些复选框具有相同的name属性(关系),这使得它们不可区分。解决这个问题的方法是为这些复选框指定不同的名称。