2012-05-23 4 views
0

im создание поисковой системы с php/sphinx/jquery, и у меня есть большая часть работы, за исключением фильтрации результатов поиска. результаты поиска не передаются фильтром, а все результаты отображаются, а затем пытаются использовать jquery, чтобы скрыть непревзойденные результаты при нажатии на флажок.jquery результаты поиска фильтра

я создал скрипку для него здесь http://jsfiddle.net/LEZAh/

что работает: проверка коробки и иметь соответствующий элемент шоу, а когда другой флажок добавить его в разрешенных коробки, чтобы показать.

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

извините за плохое объяснение, но fillde будет говорить за свою благодарность!

ответ

4

Подобно тому, как дополнение к отличному посту выше (mrtsherman, Арен), последняя строка вашего заявления еще вызывают проблемы. Быстрое и грязное решение было бы:

//$(".ni-search"+checks).show(); //this was the offending line 

    $("#cat_"+$(this).attr('id')).hide(); //instead of showing everything just hide what was clicked 

Я успешно запустил это на вашей скрипке.

+1

Хорошая уловка, моя первая мысль заключалась в том, чтобы даже не попытаться понять, почему его код не работает, потому что я знал, что это можно сделать проще. Я уверен, что он по достоинству оценит ответ, который показывает, насколько он был со своим собственным кодом! – mrtsherman

+0

Как я могу вернуть все предметы, когда ни один не выбран? http://jsfiddle.net/LEZAh/5/ – seesoe

+1

@seesoe Обновлена ​​ваша скрипка: http://jsfiddle.net/LEZAh/6/ – ahren

1

Я упростил вашу функцию щелчка.

$(document).ready(function() { 
    $('.search-option input').click(function(){ 
     var inputs = $(".search-option input"); 
     var products = $(".ni-search"); 

     products.each(function(i){ 
     if(inputs.eq(i).is(":checked")){ 
      $(this).show(); 
     }else{ 
      $(this).hide(); 
     } 
     }); 
     if(products.length == inputs.not(":checked").length){ 
      products.show(); 
     } 
    }); 
});​ 

Это предполагает, ваши результаты будут все в той же упаковке, и ваши флажки будут также все в том же обертке.

Link to updated jsFiddle

+0

гораздо более простой, но я не мог заставить его работать на моей странице (это немного более сложным), но прекрасно работает в скрипку. Я решил сохранить свой код и использовать исправление, которое предложил @Jeffrey Hogan. благодаря! – seesoe

1

Вот еще одна упрощенная версия вашего скрипта.

http://jsfiddle.net/LEZAh/4/

$('input').change(function() { 
    //all checkboxes are unchecked, so show all 
    if ($('input:checked').length == 0) { 
     $('.ni-search').show(); 
    } 
    else { 
     //otherwise only show checked 
     $('.ni-search').hide(); 
     $('input:checked').each(function(index) { 
      $('.ni-search').eq(index).show(); 
     }); 
    } 
});​ 
Смежные вопросы