在Chrome浏览器中,它们的行为不符合预期,如果使用size属性,则样式选项将不起作用。我该如何工作?
<select size=2>
<option>1</option>
<option selected>2</option>
<option style="display: none;">3</option>
<option>4</option>
</select>
<br/>
<select>
<option>1</option>
<option selected>2</option>
<option style="display: none;">3</option>
<option>4</option>
</select>
http://jsfiddle.net/D9X9U/1/
我在这里的最终目的是要有一个搜索框,用于过滤某种选择列表。
最佳答案
我最终使用了隐藏的选择列表,并在两者之间移动了元素。如果有人发现此问题并可以改善此问题,请这样做,我会标记您的答案。我或多或少地在通过javascript和jquery摸索,所以我相信可以做很多事情来改善它。
http://jsfiddle.net/x6cfF/1/
编辑:找到此解决方案的任何人,这里有一个更好的解决方案https://codereview.stackexchange.com/questions/23706/better-way-to-filter-select-list/23710?noredirect=1#23710
<input type="search" id="SearchBox" />
<br />
<div class="scrollable" id="CustomerSelectDiv">
<select size=2 class="scrollableinside" id="CustomerSelect">
<option value=100>test</option>
<option value=101>test1</option>
<option value=102>test2</option>
<option value=103>test3</option>
</select>
</div>
<div style="display: none;">
<select id="CustomerSelectHidden"></select>
</div>
<script type="text/javascript">
window.onload=function() {
var $options = $('#CustomerSelect option');
document.getElementById("SearchBox").onkeyup = function () {
var $HiddenOptions = $('#CustomerSelectHidden option');
$HiddenOptions.each(function (index, value) {
document.getElementById('CustomerSelect').appendChild(this);
});
var search = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();
var element = $options.filter(function () {
var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
return !~text.indexOf(search);
}).appendTo(document.getElementById('CustomerSelectHidden'));
}
}
</script>