php / javascript - 字符串中的最后一个字符永远不会被删除

时间:2016-08-22 08:15:33

标签: javascript php

<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函数中获取值时,一切正常,除非我清空文本字段,它在我清空字段之前一直显示最后一个值。

示例:

  1. 我输入“ffff”,它会更新,我一次删除一个f,它会保留 更新,直到我删除最后一个f并得到一个空字段,它只是 继续显示f值作为传递值。
  2. 我输入“hello”,当我立刻删除整个字符串时,它会更新, 传递的值保持在hello。
  3. 我认为当字段为空时,该函数不会被调用。

    我该如何解决这个问题?

1 个答案:

答案 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