2014-01-28 33 views
1

背景/目前的jQuery/JS防止重复复选框出现使用多选控件

我使用正在从一个JavaScript文件填充埃里克·海因兹jQuery的多选的Widget。在我的小提琴中,用户只能在两个小工具之间检查2个选项。一旦用户选择了一个选项,如果相应的Main被选中,则一个带有值的动态复选框被附加到Main。用户也能够首先检查Main或一个选项,并且仍然动态地显示在相应的Main下。

问题如果在已检查的Main1下已经添加了Option1,则检查Main2也会向Main1添加一个副本。请看我的小提琴如何工作和问题,我试图解决。 http://jsfiddle.net/3u7Xj/94/

$(document).ready(function() { 
    $(".multiselect").multiselect({ 
     header: "Choose up to 5 areas total", 
     click: function (event, ui) { 
      var number1=$("#MDCselect").children(":checked").length, 
       number2=$("#Clinicalselect").children(":checked").length; 

      if (ui.checked && ((number1 + number2 >=2) || $(this).children(":checked").length >= 2)) { 
       return false; 
      } 

      var lbl = ui.value; 
      if(ui.checked){ 
       var ctrl = '<input type="checkbox" name="chk" checked="checked" class="chk" id="'+lbl+'">'; 
       $("[id^=id]:checked").each(function(){ 
        $(this).nextAll('.holder:first').append('<div>'+ctrl+lbl+'</div>');  
       }); 
      } 
      else { 
       $("[id^=id]:checked").each(function(){ 
        $(this).nextAll('.holder:first').find('#' + lbl).parent().remove(); 
       }) 
      } 
     }, 
     selectedList:5 
    }); 
    $(".checkers").click(function() {   
     if(!$(this).is(':checked')) { 
      $(this).nextAll('.holder:eq(0)').find('div input').parent().remove(); 
     } 
     else { 
      var checkedOnes = $('#MDCselect').nextAll('.ui-multiselect-menu').find('ul li input:checked'); 
      for(var i = 0; i < checkedOnes.length; i++) { 
       var lbl = checkedOnes.eq(i).attr('value'); 
       var ctrl = '<input type="checkbox" name="chk" checked="checked" class="chk" id="'+lbl+'">'; 
       $("[id^=id]:checked").each(function(){ 
        $(this).nextAll('.holder:first').append('<div>'+ctrl+lbl+'</div>');  
       }); 
      } 
     } 
    }); 
}); 

回答