a related question有很好的回应,但方法和我的实际实施需要不同的策略。
请查看我作为我的作业完成的演示示例: http://jsfiddle.net/k8fNb/
我有两个家庭作品:
单击收音机时,选择值应与无线电值(#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);
});
});
});
非常感谢任何帮助。
答案 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);
});
});