2016-08-22 2 views
0

PHP/JavaScript - последний символ в строке никогда не удаляется

<form action='' method='post'> 
 
<input type='text' name='username' onkeyup='findUsers(this.value)'> 
 
<input type='submit' value='Add Member'> 
 
<div id='livesearch'></div>

<script> 
 
\t function findUsers(str) { 
 
\t \t if (str == "") { 
 
\t \t \t return; 
 
\t \t } else { 
 
\t \t \t if (window.XMLHttpRequest) { 
 
\t \t \t \t // code for IE7+, Firefox, Chrome, Opera, Safari 
 
\t \t \t \t xmlhttp = new XMLHttpRequest(); 
 
\t \t \t } else { 
 
\t \t \t \t // code for IE6, IE5 
 
\t \t \t \t xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
 
\t \t \t } 
 
\t \t \t xmlhttp.onreadystatechange = function() { 
 
\t \t \t \t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
 
\t \t \t \t \t document.getElementById("livesearch").innerHTML = xmlhttp.responseText; 
 
\t \t \t \t } 
 
\t \t \t }; 
 
\t \t \t xmlhttp.open("GET","/classes/livemembersearch.php?q="+str,true); 
 
\t \t \t xmlhttp.send(); 
 
\t \t } 
 
\t } 
 
</script>

$q = $_GET["q"];

При получении значения я n функция findUsers, все работает нормально, за исключением случаев, когда я опустошаю текстовое поле, он продолжает показывать последнее значение, прежде чем я опустошу поле.

Примеры:

  1. I типа «FFFF», он обновляет, я удаляю одну п в то время, он держит обновление, пока не удалить последний е и получить пустое поле, он просто держит показывая f как пройденное значение.
  2. Я печатаю «привет», он обновляет, когда я удаляю всю строку сразу, переданное значение остается на привет.

Я думаю, что функция просто не вызывается, когда поле пусто.

Как бы исправить это?

+1

Можете ли вы опубликовать функцию, которая должна очистить текстовое поле, пожалуйста? – NoobishPro

ответ

0

Вы в состоянии вашей функции:

if (str == "") { 
      return; 
     } 

Это означает, что функция не будет завершена, и этот вопрос Вы представляете действительно произойдет. Я предполагаю, что вы опорожняете элемент lifeearch? С document.getElementById("livesearch").innerHTML = xmlhttp.responseText; можно найти в инструкции else, он никогда не будет выполнен. Тогда это должно быть так:

if (str == "") { 
    document.getElementById("livesearch").innerHTML = ""; 
} 

, оставляя остальное как есть. Таким образом, вы опорожняете его, когда str пуст, но вы его заполняете при вызове ajax.

p.s. оператор return; в выражении if является избыточным. Поскольку оператор if имеет значение true, else не будет выполняться в любом случае.

Редактировать: Также обратите внимание, что onkeyup может не запускаться, если кто-то копирует текст вместо того, чтобы вводить его. Хотя это маловероятно с именем пользователя, я подумал, что было бы хорошо сообщить вам, на всякий случай. - тот, который делает это, будет функцией oninput.

Более подробная информация here

+0

Thx !! Оказалось, что, впервые работая с javascript. Что вы предлагаете использовать вместо onkeyup? –

+0

'oninput' =) Если мой ответ на ваше удовлетворение, пожалуйста, не забудьте принять его, чтобы люди знали, что вопрос был закрыт :) – NoobishPro

Смежные вопросы