根据无线电数据过滤掉选择选项

时间:2013-07-10 22:12:28

标签: jquery

a related question有很好的回应,但方法和我的实际实施需要不同的策略。

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

我有两个家庭作品:

  1. 根据数据过滤器隐藏和显示选择选项:TODO
  2. 根据无线电值选择选择选项:DONE
  3. 单击收音机时,选择值应与无线电值(#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);
        });
      });
    });
    

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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/