2012-11-15 60 views
0

我有一個div列表,我想過濾兩組複選框:TypeCategoryjQuery多重選擇器不合法

當檢查2個類別時,應顯示至少包含1個類別的DIV。

當一個類型被選中時,它應該只顯示該類型的DIV。即使它包含一個檢查類別。

<input type="checkbox" name="type[]" value="Type 1"> 
<input type="checkbox" name="type[]" value="Type 2"> 
<input type="checkbox" name="type[]" value="Type 3"> 

<input type="checkbox" name="category[]" value="1"> 
<input type="checkbox" name="category[]" value="2"> 
<input type="checkbox" name="category[]" value="3"> 
<input type="checkbox" name="category[]" value="4"> 

div的:

<div data-type="Type 1" data-cat="1 4"> 
<div data-type="Type 2" data-cat="1 2 3"> 

我到目前爲止的代碼(僅適用於過濾器類型):

$('form input:checkbox').change(function(){ 
    var type = []; 
    var checked = $(':checkbox:checked').length; 

    // Hide all 
    $('#videoHolder').children('div').hide(); 

    $(':checkbox:checked').each(function(i){ 
    type[i] = $(this).val(); 
    $('#videoHolder').children('div[data-type="' + type[i] + '"]').fadeIn(); 
    }); 

    // Show all 
    if(checked==0){ 
     $('#videoHolder').children('div').fadeIn(); 
    } 
}); 
+0

您可以創建一個小提琴 –

+0

這裏有一個小提琴:[鏈接](http://jsfiddle.net/4F5Bz/) – Veur

回答

0

您需要手動檢查每個類別屬性。 或者你可能會考慮使用jQuery的regEx插件。

// select only category check box-es!! 
$(':checkbox:checked').each(function(i, checkBox){ 

    var search = $(checkBox).val(); 

    $('#videoHolder').children('div').each(function(index, divTag) { 
     var category = $(divTag).attr("data-cat"); 
     var dataType = $(divTag).attr("data-type"); 

    if (isOfType(search, dataType) || containsCategory(search, category)) 
     $(divTag).fadeIn(); 
    }); 
    }); 
+0

這隻會在'category'過濾。如何添加'type'過濾器到這個? – Veur

+0

增加了額外的IF ....但這只是一般的想法如何使這項工作。例如,您可以在每個循環之前通過屬性值過濾複選框。 – Drejc

+0

謝謝,我用你的想法解決了它 – Veur