3

一个相关的问题得到了很好的回应,但是方法和我的实际实施需要不同的策略。

请查看我作为作业完成的演示示例:http: //jsfiddle.net/k8fNb/

我有两个家庭作业:

  1. 根据数据过滤器使选择选项隐藏和可见:TODO
  2. 根据单选值选择选择选项:DONE

当您单击单选时,选择值应该与单选值(#2)相同,并且完成,但这也应该根据单选的数据过滤器过滤选择选项的可见性。数据过滤器["a","b","c"]#filters使具有值 a、b、c 的选项可见,并隐藏其余选项。我的问题是如何处理#1。

HTML:

<div id="filters">
  <input type="radio" name="filter" value="a" data-filter="["a","b","c"]"/><label>a </label>
  <input type="radio" name="filter" value="b" data-filter="["a","b","c"]"/><label>b </label>
  <input type="radio" name="filter" value="c" data-filter="["a","b","c"]"/><label>c </label>
  <input type="radio" name="filter" value="1" data-filter="["1","2","3"]"/><label>1 </label>
  <input type="radio" name="filter" value="2" data-filter="["1","2","3"]"/><label>2 </label>
  <input type="radio" name="filter" value="3" data-filter="["1","2","3"]"/><label>3 </label>
</div>

<select id="options">
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>  
</select>

jQuery:

$(document).ready(function(){

  $('#filters input').each(function () {
    var v = $(this).val();
    $(this).click(function () {
      $('#options option').filter(function(){
        // 1. Make select options hidden or visible based on data-filter.
        // ? TODO ....

        // 2. FIXED. Change select value to use radio value
        return $(this).val() == v;
      }).prop("selected", true);
    });
  });
});

任何帮助深表感谢。

4

1 回答 1

2

如果放入"["a","b","c"]"data-filter它将被视为字符串而不是数组。

像这样接近它怎么样?

HTML:

<div id="filters">
  <input type="radio" name="filter" value="a"/><label>a</label>
  <input type="radio" name="filter" value="b"/><label>b</label>
  <input type="radio" name="filter" value="c"/><label>c</label>
  <input type="radio" name="filter" value="1"/><label>1</label>
  <input type="radio" name="filter" value="2"/><label>2</label>
  <input type="radio" name="filter" value="3"/><label>3</label>
</div>

<select id="options">
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>  
</select>

JAVASCRIPT:

$(function () {
    var arrays = [
        ['a', 'b', 'c'],
        ['1', '2', '3']
    ];

  $('#filters input').change(function () {
      var value = $(this).val();
      var activeArr = [];
      var index;
      for(var i = 0; i < arrays.length; i++){
          index = $.inArray(value, arrays[i]);
          if(index > -1){
              activeArr = arrays[i];
              break;
          }
      }

      $('#options').empty(); //clear options
      $.each(activeArr, function(i, e){
         $('#options').append('<option value="' + e + '">' + e + '</option>');
      });

      $('#options option').eq(index).prop('selected', true);  
  });
});

演示:http: //jsfiddle.net/dirtyd77/JrY9R/3/


但是,您也可以使用.split()和删除括号创建一个新数组。

HTML:

<div id="filters">
  <input type="radio" name="filter" value="a" data-filter="a,b,c"/><label>a</label>
  <input type="radio" name="filter" value="b" data-filter="a,b,c"/><label>b</label>
  <input type="radio" name="filter" value="c" data-filter="a,b,c"/><label>c</label>
  <input type="radio" name="filter" value="1" data-filter="1,2,3"/><label>1</label>
  <input type="radio" name="filter" value="2" data-filter="1,2,3"/><label>2</label>
  <input type="radio" name="filter" value="3" data-filter="1,2,3"/><label>3</label>
</div>

<select id="options">
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>  
</select>

JAVASCRIPT:

$(function () {
  $('#filters input').change(function () {
      var value = $(this).val();
      var activeArr = $(this).data('filter').split(',');
      var index;
      index = $.inArray(value, activeArr);
      $('#options').empty(); //clear options

      $.each(activeArr, function(i, e){
         $('#options').append('<option value="' + e + '">' + e + '</option>');
      });
      $('#options option').eq(index).prop('selected', true);  
  });
});

演示:http: //jsfiddle.net/dirtyd77/k8fNb/2/

于 2013-07-11T01:54:46.047 回答