2014-01-24 84 views
0

我正在使用Eric Hynds從JavaScript文件填充的jQuery MultiSelect Widget。如果選中了Main,則會在「Main」複選框下創建一個複選框。如果未選中相應的Main,我如何將其設置爲動態創建的複選框刪除的位置?請看我的小提琴來說明我的問題http://jsfiddle.net/3u7Xj/76/jQuery/js刪除動態創建的複選框

$(document).ready(function() { 
    $(".multiselect").multiselect({ 
     header: "Choose up to 5 areas total", 
     click: function (event, ui) { 
      var number1=$("#dropdown1").children(":checked").length, 
       number2=$("#dropdown2").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^=Main]:checked").each(function(){ 
        $(this).nextAll('.holder:first').append('<div>'+ctrl+lbl+'</div>');  
       }); 
      } 
      else { 
       $("[id^=Main]:checked").each(function(){ 
        $(this).nextAll('.holder:first').find('div input[id="'+lbl+'"]').parent().remove(); 
       }); 
      } 

     }, 
     selectedList:5 
    }); 
}); 

是這樣的?

$("[id^=id]:checked",false).each(function(){ 
    $(this).nextAll('.holder:first').find('div input[id="'+lbl+'"]').parent().remove(); 
    }); 

或者

if(ui.checked = false){ 
      $(this).nextAll('.holder:first').find('div input[id="'+lbl+'"]').parent().remove(); 

      } 
      else{}; 
+0

而不是一個接一個地問同一個項目的10個問題,試着***學習你正在使用的語言***,這樣你就可以自己弄清楚事情而不是依靠別人的幫助。這是你永遠學習和變得更好的唯一方法 –

回答

3

如何添加呢?

$("input[name^=chkMain]").change(function(){ 
    if($(this).not(':checked')){ 
     $(this).next('label').next('.holder').html(''); 
    } 
}); 

http://jsfiddle.net/3u7Xj/77/

是你的意思?

+0

是的,這是完美的。無論如何輕鬆添加相反?因此,如果從下拉列表中選擇「1」,則檢查Main1,然後添加它? – user3191137

+0

當然可以!你可以使用if(){...} else {...}'在檢查框時執行某些操作,而在未檢查時執行其他操作。這是我很快就想出來的:http://jsfiddle.net/3u7Xj/81/,但它仍然需要一些工作 – vahanpwns

+0

真棒,但是一些奇怪的事情繼續下去。如果我檢查Main4-6,它會增加值1-3-3。希望這將保持兩部分之間的分開。 – user3191137

1

試試這個

else { 
    $("[id^=Main]:checked").each(function(){ 
     $(this).nextAll('.holder:first').find('#' + lbl).parent().remove(); 
    }) 
} 

Demo

我還補充說,取消選中主的子女,如果沒有選中一個功能。刪除密碼

$(".checkers").click(function() {   
    if(!$(this).is(':checked')) { 
     $(this).nextAll('.holder:eq(0)').find('div input').attr("checked", this.checked); 
    } 
}); 

如果您不想要該功能。你也可以改變.attr("checked", this.checked).parent().remove()如果你想刪除的複選框而不是

如果你想反其道而行之,這意味着選中的複選框,然後在主,你可以使用下面的

var checkedOnes = $('#dropdown1').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^=Main]:checked").each(function(){ 
     $(this).nextAll('.holder:first').append('<div>'+ctrl+lbl+'</div>');  
    }); 
} 

Updated Demo

+0

我確實需要這個,那是我的下一步。它取消選中,但它可以刪除複選框和未選中時一起標註? – user3191137

+0

當然,只要將'.attr(「checked」,this.checked)'改爲'.parent()。remove()' –

+0

@ user3191137我更新了它以適應其他答案的評論中的請求 –