我在过滤基于HTML输入的HTML选择选项时遇到问题。例如: 如果我在输入中写T恤,我想在我选择的选项中只看到T恤 我的代码看起来像这样......
<input type="text" name="search" id="inputdata" onkeyup="filter()">
<select name="select[]" id="filtersimilar" multiple>
<?php foreach ($all as $row) { ?>
<option value="<?php echo $row->id_product; ?>" itemid="<?php echo $row->name; ?>"><?php echo $row->name; ?></option>
<?php } ?>
</select>
JS / Jquery代码是:
<script>
function filter(){
inp = $('#inputdata').val();
$("#filtersimilar").change(function() {
var options = $(this).data('options').filter('[itemid=' + inp + ']');
$('#select2').html(options);
});
}
</script>
答案 0 :(得分:2)
您检查过jquery.filter文档吗? (http://api.jquery.com/filter/)正如@Elfentech指出的那样,你指的是不存在的东西(选项)。
我建议您使用“style =”display:none;“使所有选项不可见,并且当您进行过滤时,将过滤后的选项设为”display:block;“。但是,您的过滤方法看起来确实超出标准检查文档以了解过滤的工作原理。
答案 1 :(得分:0)
对我来说,正确答案就是这个
$(function() {
var opts = $('#filtersimilar option').map(function(){
return [[this.value, $(this).text()]];
});
$('#inputdata').keyup(function(){
var rxp = new RegExp($('#inputdata').val(), 'i');
var optlist = $('#filtersimilar').empty();
opts.each(function(){
if (rxp.test(this[1])) {
optlist.append($('<option/>').attr('value', this[0]).text(this[1]));
}
});
});
});