【问题标题】:Select boxes, disabling values based on values in an array选择框,根据数组中的值禁用值
【发布时间】:2012-06-28 21:24:08
【问题描述】:

我有一个选择菜单,它为用户提供了一些标准选项,可用作搜索过滤器,用户可以添加任意数量的过滤器,但目前用户可以添加相同的过滤器不止一次。

我想要做的是,当用户从选择框中选择一个过滤器时,该值被添加到一个数组中,然后选择框中的该选项被禁用,这可以使用 javascript 和 jquery 吗?

目前我有以下

创建新过滤器选择菜单的代码

$('select.option').live({
  change: function() {
    if($(this).val() == 'distance')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/distance',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'height')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/height',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'appearance')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/appearance',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'education')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/education',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'children')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/children',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'smoking')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/smoking',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'drinking')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/drinking',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'politics')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/politics',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'religion')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/religion',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'ethnicity')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/ethnicity',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
    else if($(this).val() == 'work')
    {
        var element = $(this);
        $.ajax({
            url: site_url + 'ajax/row/work',
            success: function(data) {
                element.parent().next('td.fillin').html(data);
            }
        });
    }
  }
});

【问题讨论】:

    标签: javascript jquery html arrays


    【解决方案1】:

    url 的名称和选择的选项相同,你可以试试这个:

    $('select.option').on({
      change: function() {
            var element = $(this).val();
            $(this).prop('disabled', true);
            $.ajax({
                url: site_url + 'ajax/row/' + element,
                success: function(data) {
                    element.parent().next('td.fillin').html(data);
                }
            });
    })
    

    【讨论】:

      【解决方案2】:

      不知道你的 HTML 是什么样子,但我会大致如下:

      <select class="option">
          <option value="distance" data-path="ajax/row/distance">Distance</option>
          <option value="height" data-path="ajax/row/height">Height</option>
          ...
      </select>
      

      然后让jQuery成为(假设在一页中有多个选择并且每行只能应用一次过滤器):

      $('select.option').live({
          change: function() {
              // get selected history or empty array
              var selected = $(this).data('selected') || [];
      
              // get selected option
              var $element = $(this).find('option:selected');
      
              // if selected option in history, return
              if($.inArray($element.val(), selected) return;
      
              // otherwise, add to history and save back into element
              selected.push($element.val());
              $(this).data('selected', selected);
      
              // query AJAX by using the data- attribute of the option
              $.ajax({
                  url: site_url + $element.data('path'),
                  success: function(data) {
                      element.parent().next('td.fillin').html(data);
                  }
              });
          }
      });
      

      【讨论】:

      • 什么 var selected = $(this).data('selected') || [];做? $(this).data('selected');正在返回未定义。
      • @sico87:第一次通过 $(this).data('selected') 将是未定义的,因此 selected var 将被设置为空数组 ([]) -第二次不会,所以它会返回先前选择的选项的保存数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 2018-09-19
      • 2018-03-07
      • 2019-05-22
      • 2018-01-06
      相关资源
      最近更新 更多