2013-05-03 2 views
1

У меня есть модальное окно уникального флажкаПроверить флажки на основе массива - JQuery

<div class="tv-choices" style="display:none;"><!-- turned on via button--> 
<div class="choices-title">TV</div> 
<div class="choices-checkboxes"> 
    <div class="category_box"> 
     <input type="checkbox" id="getf{038}" name="getfItem" value="Adult Animated"> 
     <label for="get{038}">Adult Animated</label> 
    </div> 

    <div class="category_box"> 
     <input type="checkbox" id="getf{9FA}" name="getfItem" value="Anime"> 
     <label for="get{9FA}">Anime</label> 
    </div> 

    <div class="category_box"> 
     <input type="checkbox" id="getf{821}" name="getfItem" value="Award Shows"> 
     <label for="get{821}">Award Shows</label> 
    </div> 
</div> 

Теперь у меня есть многомерный массив:

object_with_arrays['genreAry'+ary_Num] 

Скажет, массив object_with_arrays[genreAry1] имеет: Анимация для взрослых и Аниме, но не Премиум-альбом. Как вы можете получить эти флажки для проверки через jQuery?

История проекта: У меня есть 9 сгенерированных кнопок, которые создают «Модальное окно» на лету, каждое модальное окно обслуживает набор флажков. Поскольку я использую 1 модальное окно, я должен очистить проверенные флажки. Я нашел этот код ниже, который работает, но я просто не могу показаться, чтобы выяснить, как повторно заполнить флажки с моими Массивами

$('.tv-choices').find(':checked').each(function() { 
     $(this).removeAttr('checked'); 
    }); 
+1

Обратите внимание, что ваши входные 'id's и метка' for' атрибутов не совпадают. Кроме того, вы должны использовать '.prop ('checked', false)' вместо удаления атрибута. –

+0

Ах спасибо, что также очищает мои флажки :) –

ответ

2
$('.modal').find('input[type="checkbox"]').each(function() { 
    var state = $.inArray(this.value, object_with_arrays['genreAry1'])!=-1; 

    $(this).prop('checked', state); 
}); 

перебрать флажки и установите проверенное свойство, основываясь на или нет значения флажка в массиве?

+0

'object_with_arrays' - многомерный массив, поэтому метод' in' не может работать, если он не содержит объектов (и я думаю, что 'object_with_arrays' в массиве массивов строк) , –

+0

@AlessandroVendruscolo - я изменил его, но все еще не уверен, что такое 'object_with_arrays', так как кажется странным назвать массив« объект », но я предполагаю, что это массив массивов. – adeneo

+1

+1. Кстати, в вопросе он говорит: «Скажем, у массива object_with_arrays [genreAry1] есть: Adult Animated и Anime, но не показы наград», поэтому я думаю, что 'object_with_arrays [genreAry1] = ['Adult Animated', 'Anime']'. –

2

Вы можете фильтровать атрибуты с помощью jQuery. Если вы ищете только для одного элемента, это было бы так:

$('.modal').find('input:checkbox[value="Anime"]').each(function() { 
    $(this).prop('checked', true); 
}); 

Но так как вы хотите, чтобы проверить по списку значений, вы можете использовать filter с обратным вызовом:

var searchValues = object_with_arrays['genreAry'+ary_Num]; 
//e.g. searchValues == ["Anime", "Adult Animated"] 

$('.modal').find('input:checkbox').filter(function() { 
    return searchValues.indexOf($(this).val()) >= 0; 
}).each(function() { 
    $(this).prop('checked', true); 
}); 

Если вы также хотите снимите флажок все остальные флажки:

$('.modal').find('input:checkbox').each(function() { 
    var checked = searchValues.indexOf($(this).val()) >= 0; 
    $(this).prop('checked', checked) 
}); 
+0

Я не мог получить предупреждения, чтобы подняться в любой строке http: // jsfiddle.net/leongaban/DjDtW/ –

+0

@Leon - Были проблемы с вашим jsFiddle, но я исправил их: http://jsfiddle.net/jmorgan123/DjDtW/2/ У вас не было загружено jQuery, и у вас было некоторые переменные ('reg.the_Num' и' object_with_arrays'), которые не были определены в вашей скрипке. Вам также понадобилось обернуть HTML в элемент с классом 'modal'. Вероятно, они были созданы на вашей странице, но они не были определены в образце. Кроме того, это выглядит как более старая версия моего кода. Во всяком случае, теперь все исправлено и отлично работает! Проверьте мою версию. –

+1

@Leon - Более короткая версия (мой последний код выше) тоже отлично работает: http://jsfiddle.net/jmorgan123/DjDtW/3/ –

Смежные вопросы