餐厅预订过滤系统

时间:2017-10-20 07:33:57

标签: javascript

我的脚本达到了80%。然而,当谈到下半部分时,你是一对6-8人,我的排序脚本停止工作。我是初学者,不太了解。如果问题得到解决将会有所帮助。

问:我希望它可以工作,所以当你8个人时,你只能选择8个及以上的桌子。

现场版:and according to this SO question

代码:

$(document).ready(function () {
$("#persons").on("change", function () {

    if ($("#persons").val() > 2) {
        //alert($('#table option').size());
        for(i = 0; i < $('#table option').size(); i++) {
            if ($('#table option[value="' +  i + '"]').val() < 3){
                $('#table option[value="' +  i + '"]').remove();
            }
        }
    }

    if ($("#persons").val() > 5) {
        //alert($('#table option').size());
        for(i = 0; i < $('#table option').size(); i++) {
            if ($('#table option[value="' +  i + '"]').val() < 5){
                $('#table option[value="' +  i + '"]').remove();
            }
        }
    }

    if ($("#persons").val() > 6) {
        //alert($('#table option').size());
        for(i = 0; i < $('#table option').size(); i++) {
            if ($('#table option[value="' +  i + '"]').val() < 6){
                $('#table option[value="' +  i + '"]').remove();
            }
        }
    }

    if ($("#persons").val() >= 7) {
        //alert($('#table option').size());
        for(i = 0; i < $('#table option').size(); i++) {
            if ($('#table option[value="' +  i + '"]').val() < 8){
                $('#table option[value="' +  i + '"]').remove();
            }
        }
    }






});

使用Javascript:

var request = require('request');
var cheerio = require('cheerio');

request('https://web.whatsapp.com/', function (error, response, html) 
{
  if (!error && response.statusCode == 200) {
    console.log(html);
   }
});

});

3 个答案:

答案 0 :(得分:0)

通过不重复逻辑可以简化您的代码。以下代码做了一些事情

  1. 获取所选人数
  2. 显示所有选项
  3. 在选项
  4. 上使用.filter查找无效的选项
  5. 隐藏无效选项。
  6. &#13;
    &#13;
    $(function(){
        $('#persons').on('change',function(){
          var numPeople = parseInt($(this).val(),10);
          var $options = $('#table option');
          $options.show();
          var $invalidTables = $options.filter(function(){
              return parseInt($(this).attr("value"),10)<numPeople;
          });
          $invalidTables.hide();
          $('#table').val("");
        });
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select id="persons" class="form-group input-group clockpicker form-control selectpicker" style="width:300px;">
        <option value="1">1 Pers.
        <option value="2">2 Pers.
        <option value="3">3 Pers.
        <option value="4">4 Pers.
        <option value="5">5 Pers.
        <option value="6">6 Pers.
        <option value="7">7 Pers.
        <option value="8">8 Pers.
    </select>
    <select id="table" class="form-group input-group clockpicker form-control selectpicker" style="width:300px;">
        <option value="">
        <option value="4">Table: 1
        <option value="8">Table: 2
        <option value="2">Table: 3
        <option value="2">Table: 4
        <option value="2">Table: 5
        <option value="4">Table: 6
        <option value="2">Table: 7
        <option value="2">Table: 8
        <option value="2">Table: 9
        <option value="4">Table: 10
        <option value="6">Table: 11
        <option value="4">Table: 12
        <option value="4">Table: 13
        <option value="4">Table: 14
        <option value="4">Table: 15
        <option value="4">Table: 16
        <option value="2">Table: 17
        <option value="2">Table: 18
        <option value="4">Table: 19
        <option value="4">Table: 20
        <option value="4">Table: 21
        <option value="4">Table: 22
        <option value="6">Table: 23
        <option value="6">Table: 24
    </select>
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

在您的代码中,您将删除座位少于所选预订的表格。如果用户意外选择了8个人,这会怎样?如果用户随后更正了选择,那么仍然只有表2可用。更好的方法是隐藏没有足够座位的桌子 -

$(document).ready(function() {
  $("#persons").on("change", function() {
    var $this = $(this);
    //Reset the table select
    $("#table").val(0);
    // Hide all tables
    $("#table").find("option").hide();
    // Select all tables then filter the list to those that have enough seats and show them
    $("#table").find("option").filter(function(index, element) {
      return parseInt($(element).attr("value")) >= parseInt($this.val());
    }).show();
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="persons" class="form-group input-group clockpicker form-control selectpicker" style="width:300px;">
                    <option value="1">1 Pers.</option>
                    <option value="2">2 Pers.</option>
                    <option value="3">3 Pers.</option>
                    <option value="4">4 Pers.</option>
                    <option value="5">5 Pers.</option>
                    <option value="6">6 Pers.</option>
                    <option value="7">7 Pers.</option>
                    <option value="8">8 Pers.</option>
                </select>
<select id="table" class="form-group input-group clockpicker form-control selectpicker" style="width:300px;">
                    <option value="0">No Table Selected</option>
                    <option value="4">Table: 1</option>
                    <option value="8">Table: 2</option>
                    <option value="2">Table: 3</option>
                    <option value="2">Table: 4</option>
                    <option value="2">Table: 5</option>
                    <option value="4">Table: 6</option>
                    <option value="2">Table: 7</option>
                    <option value="2">Table: 8</option>
                    <option value="2">Table: 9</option>
                    <option value="4">Table: 10</option>
                    <option value="6">Table: 11</option>
                    <option value="4">Table: 12</option>
                    <option value="4">Table: 13</option>
                    <option value="4">Table: 14</option>
                    <option value="4">Table: 15</option>
                    <option value="4">Table: 16</option>
                    <option value="2">Table: 17</option>
                    <option value="2">Table: 18</option>
                    <option value="4">Table: 19</option>
                    <option value="4">Table: 20</option>
                    <option value="4">Table: 21</option>
                    <option value="4">Table: 22</option>
                    <option value="6">Table: 23</option>
                    <option value="6">Table: 24</option>
                </select>

答案 2 :(得分:0)

您不应该删除项目,因为当他们更改人数时,旧数据会被删除,除了再次添加之外,您无法显示这些数据。 更新:你想基于文本值吗?这是一种方式:

$('#person').on('change', function(){
     var numOfPeople = $(this).val();
     var $table = $('#table');

     $.each($table.find('option'),function(){
        var $option = $(this);
        var numb = $option.text().match(/[\d]+/g);
        numb = numb.length ? numb[0] : 0;
        $option.toggle(numb >= numOfPeople);
      });

      //set default value for table
      $table.val(numOfPeople);
});

建议2:    - 您应该创建一个包含选项表数的属性,例如:

    <select>
       <option people="5" value="2">Table: 5</option>
       <option people="6" value="2">Table: 6</option>
       <option people="7" value="2">Table: 7</option>
       <option people="8" value="4">Table: 8</option>
       <option people="9" value="5">Table: 9</option>
       <option people="10" value="2">Table: 10 </option>

然后由人查询

 $('#person').on('change', function(){
     var numOfPeople = $(this).val();
     var $table = $('#table');

     $.each($table.find('option'),function(){
        var $option = $(this);
        var numb = $option.attr('people');
        $option.toggle(numb >= numOfPeople);
      });

      //set default value for table
      $table.val(numOfPeople);
});