<form action='' method='post'>
<input type='text' name='username' onkeyup='findUsers(this.value)'>
<input type='submit' value='Add Member'>
<div id='livesearch'></div>
<script>
function findUsers(str) {
if (str == "") {
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("livesearch").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("GET","/classes/livemembersearch.php?q="+str,true);
xmlhttp.send();
}
}
</script>
$q = $_GET["q"];
当在findUsers函数中获取值时,一切正常,除非我清空文本字段,它在我清空字段之前一直显示最后一个值。
示例:
我认为当字段为空时,该函数不会被调用。
我该如何解决这个问题?
答案 0 :(得分:0)
你在你的职能范围内陈述:
if (str == "") {
return;
}
这意味着该功能不会完成,您提出的问题确实会发生。我假设您正在清空livesearch元素?
由于document.getElementById("livesearch").innerHTML = xmlhttp.responseText;
语句中可以找到else
,因此永远不会执行它。
那应该是这样的:
if (str == "") {
document.getElementById("livesearch").innerHTML = "";
}
同时将其余部分保留原样。
所以你在str
为空时将其清空,但是在进行ajax调用时填写它。
P.S。 if语句中的return;
语句是多余的。由于if语句为真,否则不会以任何方式执行。
编辑:另请注意,onkeyup
可能无法触发有人复制文本而不是键入文本。虽然使用用户名不太可能,但我认为让你知道是件好事,以防万一。
- 确实抓住这个的是oninput
函数。
更多信息here