我有一个选择框和一个文本框来搜索选择框中的列表。使用PHP从数据库填充“选择”框。我想在这里实现的是尽快清除文本字段;选择框应该刷新。我必须重新加载整个页面才能做到这一点。这是我用来搜索选择框的小脚本。
function filterSelectBox(filterButton) {
var searchValue = document.getElementById('selectFilter').value.toLowerCase();
var selectField = document.getElementById("domainID");
var optionsLength = selectField.options.length;
for(var i = 0; i < optionsLength; i++) {
if(selectField.options[i].innerHTML.toLowerCase().indexOf(searchValue) >= 0) {
selectField.options[i].style.display = 'block';
} else {
selectField.options[i].style.display = 'none';
}
}
}
这是与代码关联的HTML元素。
<div class="search_domains" id="search_domains">
<input type="text" id="selectFilter" name="selectFilter" />
<input type="button" id="filterButton" value="Filter" onClick="filterSelectBox(this)"/>
</div>
这就是我填充选择框的方式,
<select name="domainID" id="domainID" size="15" style="width:175">
<option>Select a Domain</option>
<? foreach ($domains as $row) {
?>
<option value="<?=$row -> id ?>"><?=$row -> domain ?></option>
<? } ?>
</select>
答案 0 :(得分:0)
我在这里做的是用同一个PHP文件中的AJAX填充列表,但是输出JSON。在加载页面时,AJAX请求将加载php文件,获取JSON并在列表中添加项目。
要在文本字段为空时进行刷新,您可以使用onChange或onKeyUp并检查值的length
。
我认为所有这些在jQuery或任何JS框架中比纯JS更简单:)
这些将有所帮助:
答案 1 :(得分:0)
你绝对可以使用AJAX,但对于这个例子,它可能没有必要。将原始内容存储在Javascript数组中并在需要时重置它可能更有效。我实际上会删除选项而不是隐藏它们:
<script type="text/Javascript">
var originalOptions = {<?php $echo = array(); foreach ($domains as $row) $echo[] = "\"{$row->id}\":\"{$row->domain}\""; echo implode(", ", $echo); ?>};
function filterSelectBox(text)
{
var selectField = document.getElementById('domainID');
selectField.options.length = 0;
for (var key in originalOptions)
{
if (originalOptions[key].substr(0, text.length) == text)
{
var option = document.createElement("option");
option.value = key;
option.text = originalOptions[key];
selectField.add(option, null);
}
}
}
</script>
<select name="domainID" id="domainID" size="15" style="width:175">
<?php foreach ($domains as $row) {
echo "\t<option value=\"{$row->id}\">{$row->domain}</option>\n";
} ?>
</select>
<input type="text" onkeyup="filterSelectBox(this.value)" />
答案 2 :(得分:0)
输入此代码:
document.getElementById('selectFilter').onkeyup = function() {
if(this.value.length == 0) {
var selectField = document.getElementById("domainID");
var optionsLength = selectField.options.length;
for(var i = 0; i < optionsLength; i++) {
selectField.options[i].style.display = 'block';
}
}
};
在页面中的</body>
标记之前,当您清除文本框值时,它会显示所有选项。