Hallo,
ich habe seit zwei Tagen zwei kleine Probleme mit meinem Filtersystem.
Mein Filter funktioniert, wie in der Überschrift schon erwähnt dadurch, dass ich über Checkboxen meine Seite Filtern lasse. Der gesamte Inhalt wird ständig durch einen onChange geprüft. Nun habe ich die Funktion so erweitert, dass man nach den Anfangsbuchstaben Filtern kann. Es klappt zwar, nur möchte ich es so haben, wenn ich beispielsweise auf A klicke und dann auf B, sollen die Ergebnisse von A wegfallen und nur die von B da sein.
Da es ja Checkboxen sind habe mir gedacht, dass ich es ganz einfach mit:
;
Nun ja die Checkboxen werden abgewählt, jedoch ändert sich von den Anzeigen nichts, bzw, die werden einfach nur dazu addiert.
Mein Filterscript, ist der hier:
So nun zum zweiten Problem.
Als nächste Erweiterung habe ich einen Suchfeld mit einem Livesearch eingebunden.
Hier habe ich das Problem, dass das Filtersystem über die Class bestimmt wird und ich Inhalte habe die teilweise mit Leerzeichen und mit einem "&" geschrieben werden, welche dem entsprechend nicht gefunden.
hier ist das livesearch script:
Nun hoffe ihr könnt mir bei den zwei Problemen helfen. Denn ich weiss echt nicht mehr weiter.
Vielen Dank schon mal im Voraus.
Ciao,
Brizzi
ich habe seit zwei Tagen zwei kleine Probleme mit meinem Filtersystem.
Mein Filter funktioniert, wie in der Überschrift schon erwähnt dadurch, dass ich über Checkboxen meine Seite Filtern lasse. Der gesamte Inhalt wird ständig durch einen onChange geprüft. Nun habe ich die Funktion so erweitert, dass man nach den Anfangsbuchstaben Filtern kann. Es klappt zwar, nur möchte ich es so haben, wenn ich beispielsweise auf A klicke und dann auf B, sollen die Ergebnisse von A wegfallen und nur die von B da sein.
Da es ja Checkboxen sind habe mir gedacht, dass ich es ganz einfach mit:
Javascript:
$('#A').checked == false; oder
$('#A').removeAttr('checked');
Nun ja die Checkboxen werden abgewählt, jedoch ändert sich von den Anzeigen nichts, bzw, die werden einfach nur dazu addiert.
Mein Filterscript, ist der hier:
Javascript:
var $container;
var filters = {};
$(function() {
$container = $('#container');
var $filterDisplay = $('#filter-display');
/*$container.isotope();*/
// do stuff when checkbox change
$('#options').on('change', function(jQEvent) {
var $checkbox = $(jQEvent.target);
manageCheckbox($checkbox);
var comboFilter = getComboFilter(filters);
$container.isotope({
filter: comboFilter
});
$filterDisplay.text(comboFilter);
});
});
function getComboFilter(filters) {
var i = 0;
var comboFilters = [];
var message = [];
for (var prop in filters) {
message.push(filters[prop].join(' '));
var filterGroup = filters[prop];
// skip to next filter group if it doesn't have any values
if (!filterGroup.length) {
continue;
}
if (i === 0) {
// copy to new array
comboFilters = filterGroup.slice(0);
} else {
var filterSelectors = [];
// copy to fresh array
var groupCombo = comboFilters.slice(0); // [ A, B ]
// merge filter Groups
for (var k = 0, len3 = filterGroup.length; k < len3; k++) {
for (var j = 0, len2 = groupCombo.length; j < len2; j++) {
filterSelectors.push(groupCombo[j] + filterGroup[k]); // [ 1, 2 ]
}
}
// apply filter selectors to combo filters for next group
comboFilters = filterSelectors;
}
i++;
}
var comboFilter = comboFilters.join(', ');
return comboFilter;
}
function manageCheckbox($checkbox) {
var checkbox = $checkbox[0];
var group = $checkbox.parents('.option-set').attr('data-group');
// create array for filter group, if not there yet
var filterGroup = filters[group];
if (!filterGroup) {
filterGroup = filters[group] = [];
}
var isAll = $checkbox.hasClass('all');
// reset filter group if the all box was checked
if (isAll) {
delete filters[group];
if (!checkbox.checked) {
checkbox.checked = 'checked';
}
}
// index of
var index = $.inArray(checkbox.value, filterGroup);
if (checkbox.checked) {
var selector = isAll ? 'input' : 'input.all';
$checkbox.siblings(selector).removeAttr('checked');
if (!isAll && index === -1) {
// add filter to group
filters[group].push(checkbox.value);
}
} else if (!isAll) {
// remove filter from group
filters[group].splice(index, 1);
// if unchecked the last box, check the all
if (!$checkbox.siblings('[checked]').length) {
$checkbox.siblings('input.all').attr('checked', 'checked');
}
}
}
So nun zum zweiten Problem.
Als nächste Erweiterung habe ich einen Suchfeld mit einem Livesearch eingebunden.
Hier habe ich das Problem, dass das Filtersystem über die Class bestimmt wird und ich Inhalte habe die teilweise mit Leerzeichen und mit einem "&" geschrieben werden, welche dem entsprechend nicht gefunden.
hier ist das livesearch script:
Javascript:
$(document).ready(function() {
// 1 - live-search darstellung
$("#searchBox").bind("keyup", function() {
var searchString = $(this).val();
$(".suche").attr('value', '.' + $(this).val());
// nur suchen, wenn minimum 1 buchstabe im eingabefeld ist
if (searchString.length > 0) {
$("#searchItems li").each(function(counterEntries) {
var item = $(this).text();
// kurzform von if-else
(item.match(searchString)) ? $(this).show(): $(this).hide();
});
$("#results").show();
} else {
$("#results").hide();
}
});
// 2 - klick auf result-item
$("#searchItems li").bind("click", function() {
$("#searchBox").val($(this).text());
$("#results").hide();
$(".suche").attr('value', '.' + $(this).text());
// wichtig, sonst öffnet der browser den link!
return false;
});
});
Nun hoffe ihr könnt mir bei den zwei Problemen helfen. Denn ich weiss echt nicht mehr weiter.
Vielen Dank schon mal im Voraus.
Ciao,
Brizzi