jQuery多面过滤器问题。

时间:2017-11-17 17:50:51

标签: javascript jquery html checkbox filter

我正在构建一个简单的分面过滤器,以帮助用户找到合适的公寓。几天前,我得到了一个基本的滑块,用平方英尺过滤出公寓。接下来的部分是让复选框工作,我发布到SO here并从icecub获得了一些帮助。从那时起,我一直致力于让它们串联工作(例如,检查2间卧室并将滑块滑动到800平方英尺,通过两个变量过滤公寓)。昨天有这个工作。

我遇到的唯一问题是现在滑块仅在选中其中一个复选框时才有效。如果同时选中了两个或没有,则滑块不起作用。我不确定我的逻辑究竟存在缺陷。

这是一个小提琴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();
        });
      });

1 个答案:

答案 0 :(得分:1)

你的其他条件不是检查sqft和滑块,它应该是:

ear {
     into("META-INF") {
        from("META-INF")
     }
}

https://jsfiddle.net/mwqkztn8/1/

或者,甚至更简单,整件事情可能只是:

else {
    if ((condoData.sqft <= sliderValue)){
        $this.show();
    } else {
        $this.hide();
    }
}

https://jsfiddle.net/mwqkztn8/3/