私はユーザーが正しいコンドームを見つけるのを助けるために、単純なファセットフィルタを構築しています。数日前、私は平方フィートでコンドミニアムを除外するための基本的なスライダを得ました。次の部分は、私がSO hereに投稿し、icecubからいくつかの助けを得たチェックボックスを働かせていました。それ以来、私はそれらを連動させるように取り組んできました(例えば、2つの寝室をチェックし、スライダーを800 sqftにスライドさせて両方の変数でコンドームをフィルターにかけるなど)。昨日仕事ができました。jQueryの多面フィルタの問題。
唯一の問題は、スライダが2つのチェックボックスのいずれかにチェックされている場合にのみ機能することです。両方またはいずれもチェックされていない場合、スライダは機能しません。私のロジックがどこに欠陥があるのか正確にはわかりません。
はここでフィドルhttps://jsfiddle.net/baskinco/mwqkztn8/
だとここでJSが
// FUNCTIONS
//make slider textbox equal to slider value
function printValue(sliderID, textbox) {
var x = document.getElementById(textbox);
var y = document.getElementById(sliderID);
x.value = y.value;
}
//get bdrm and slider values
function getValues() {
var bdrm1 = false;
var bdrm2 = false;
var sliderValue;
if($("#1bdrm").is(':checked')){
bdrm1 = true;
}
if ($("#2bdrm").is(':checked')){
bdrm2 = true;
}
sliderValue = $("#rangeValue").val();
runFilter(bdrm1, bdrm2, sliderValue);
}
function runFilter(bdrm1, bdrm2, sliderValue) {
$.each($('.condo-box'), function() {
$this = $(this);
condoData = $this.data();
if(bdrm1 && !bdrm2){
if ((condoData.bdrms == 1) && (condoData.sqft <= sliderValue)){
$this.show();
} else {
$this.hide();
}
} else if(bdrm2 && !bdrm1){
if ((condoData.bdrms == 2) && (condoData.sqft <= sliderValue)){
$this.show();
} else {
$this.hide();
}
} else {
$this.show();
}
});
}
// Set values for units
$('#jackson').data({
id:1,
sqft:897,
bdrms:2
});
$('#nicholl').data({
id:2,
sqft:808,
bdrms:2
});
$('#atwood').data({
id:3,
sqft:1020,
bdrms:2
});
//etc
//MAIN SCRIPT
$(document).ready(function() {
//print slider value to slider textbox
printValue('slider','rangeValue');
//when a bdrm box is checked ..
$("#1bdrm, #2bdrm").click(function(){
getValues();
});
//when the slider is moved
$("#slider").change(function() {
getValues();
});
});
あなたのマークアップがあまり変化していない場合、変数にセレクタをキャッシュすることをお勧めします。複雑なセレクタ(あなたのケースではありませんが、それでも..)がある場合は、毎回dom要素をフェッチするのはコストがかかる可能性があります。 –
ちょっと@PabloMescher、私は理論的には理解していますが、ありがとう! – Marc
あなたのコードでセレクタが2回使用されている例はありませんので、私のアドバイスは実際には話題にはなりませんでした。既に知っていれば私を無視してください:)。 私は、スライダーやコンボボックスを操作するコードがアプリにたくさんあると思っていましたが、その場合、事前にキャッシュしておくと良いでしょう。 '' $ var "slider = $("#slider " ); $ slider.change(...) //さらに下へ $ slider.on( "click"、...) '' ' –