【发布时间】:2018-02-07 14:40:36
【问题描述】:
我使用搜索框搜索人员的详细联系信息。最初有 4 个联系人:
1)"Jonathan Buell",5804337551,"family"
2)"Patrick Daniel",8186934432,"work"
3)"Lorraine Winter",3138211928,"work"
4) "Constance Reed",3138211928,"family"
现在让我们说,如果我在输入框中输入j,它应该只显示Jonathan Buell,如果我在输入中输入Lorr,那么它应该显示Lorraine Winter 联系方式。如果用户键入xyz 时字符串不匹配,则不应显示任何联系人。
我尝试实现上述搜索功能,但它不会动态更改内容,没有观察到任何变化。
索引.html:
var array = [];
function Person(fullName, number, group) {
this.fullName = fullName;
this.number = number;
this.group = group;
array.push(this);
}
var p1 = new Person("Jonathan Buell", 5804337551, "family");
var p2 = new Person("Patrick Daniel", 8186934432, "work");
var p3 = new Person("Lorraine Winter", 3138211928, "work");
var p4 = new Person("Constance Reed", 3138211928, "family");
console.log(array);
function showContacts() {
for (var i in array) {
var id = i;
contactlist.innerHTML +=
`
<ul>
<div>
<p>Name: ` + array[i].fullName + `</p>
<p>Number: ` + array[i].number + `</p>
<p>Group: ` + array[i].group + `</p>
<button type="button" class="btn btn-warning" onclick="editContact(` + id + `)">Edit</button>
<button type="button" class="btn btn-danger">Delete</button>
</div>
`
}
}
showContacts();
function search() {
var search = document.getElementById("search").value;
contactlist.innerHTML = '';
for (var i in array) {
if (array[i].fullName.toLowerCase().includes(search.toLowerCase())) {
var id = i;
contactlist.innerHTML =
`
<ul>
<div>
<p>Name: ` + array[i].fullName + `</p>
<p>Number: ` + array[i].number + `</p>
<p>Group: ` + array[i].group + `</p>
<button type="button" class="btn btn-warning" onclick="editContact(` + id + `)">Edit</button>
<button type="button" class="btn btn-danger">Delete</button>
</div>
</ul>
`;
}
}
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div class="input-group">
<input type="text" id="search" class="form-control" placeholder="Search">
</div>
</form>
</div>
<div id="contactlist">
</div>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
我的应用截图:
【问题讨论】:
-
你真的不应该将类构造函数绑定到推送到外部数组,而是将
new Person(...)推送到数组中。 -
您在 javascript 代码中使用 `´ 来包装 html 代码。也许这是您遇到问题的原因之一。
-
我没有看到任何事件附加到您的搜索输入更改调用
search() -
旁注,不要这样做:
<p>Name: `+ array[i].fullName + `</p>,template strings is interpolation 的全部优势。相反,请<p>Name: ${array[i].fullName}</p> -
@Striped 为什么要调用
search()假设我输入j那么它应该动态更改联系人列表并将Jonathan Buell显示为j匹配到J的Jonathan Buell
标签: javascript html css