2014-02-10 1 views
0

Я нашел этот фрагмент кода в сети и адаптировал его к моим потребностям.Ошибка отображения автозаполнения JQuery MSG, если нет результата

привет, может быть остальная часть моего кода поможет прояснить это:

index.php>

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="searchdb.js"></script> 

<div>DBLookUp <input id="autocomplete" type="text" /> 
<div id="showresults"></div> 
</div> 

searchdb.js>

//autocomplete function 
     $(document).ready(function(){ 
      $("#autocomplete").keyup(function() 
      { 
       $("#showresults").show(); 
       var dbsearch; 
       dbsearch = $("#autocomplete").val(); 

       if (dbsearch.length > 0) 
       { 
        $.ajax( 
        { 
         type: "POST", 
         url: "autocomplete.php", 
         data: "dbsearch=" + dbsearch, 
         success: function(message) 
         { 
          $("#showresults").empty(); 
          if (message.length > 0) { 
        $("#showresults").append(message); 
       } else { 
        $("#showresults").append("No Results found!"); 
       } 
         } 
        }); 
       } 
       else 
       { 
        // if empty 
        $("#showresults").empty(); 
       } 
      }); 
     }); 

// конец функции автозаполнения

 function selectItem(id,value) 
     {    
      document.getElementById("autocomplete").value=value;    
      autocomplete(id,value); 
     } 

autocomplete.php>

<?php 
require_once("searchdb.php"); 
$dbsearch = strtolower(mysql_real_escape_string(strip_tags($_POST['dbsearch']))); 
$autocompl=new DBQUERY(); 
$autocompl->autocomplete($dbsearch); 
?> 

searchdb.php>

<?php 
class DBQUERY { 

private $dbh; 

public function __construct() { 
    $this->dbh = new PDO("mysql:host=localhost;dbname=mydb", "root", ""); 
} 

public function autocomplete($dbsearch) 
{ 

    $cons = $this->dbh->prepare("select * from clients where cl_name like :dbsearch"); 

        $cons->execute(array(':dbsearch' => '%'.$dbsearch.'%')); 
        while($dbrow = $cons->fetch()) 
     { 
     $data=$dbrow["cl_name"];$id=$dbrow["cli_id"]; 

        echo "<a class='resultsdb' href=\"javascript:selectItem 
        (".$id.",'".$data."')\">".$data."</a><br>"; 
        } 
        ?> 

    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $(".resultsdb").click(function(){ 
       $("#showresults").hide(); 
      }); 
     }); 
    </script> 
<?php 
    } 
//end autocomplete 
} 
?> 

он прекрасно работает, но я не могу сделать это не показывать "результаты не найдены!" сообщение. Я думаю, что else-предложение перезаписывается оператором if, который начинает работать, как только он обнаруживает ввод. (... if (dbsearch.length> 0) ...)

но так как im new для jquery i can not, похоже, выясняет, где изменить скрипт так, чтобы он работал правильно.

+0

Параметр 'message' объект, возвращаемый из' autocomplete.php' файла не должен иметь длину <= 0. Попробуйте проверить значение 'message', когда вы ожидаете, чтобы быть пустым, чтобы увидеть его истинное значение. – Nunners

+0

как бы я это сделал? – user3292312

ответ

0

, возможно, также это может работать:

if (message.trim() != "") { 
    //message = message; <-- not needed.. 
    $("#showresults").append(message); 
}else{ 
    //message = "No Results found!"; <-- also not needed.. 
    $("#showresults").html("No Results found!"); 
} 

Вы должны возвратить пустую строку образуют РНР ... А также, это не должно быть там ...

<script type="text/javascript"> 
     $(document).ready(function(){ 
      $(".resultsdb").click(function(){ 
       $("#showresults").hide(); 
      }); 
     }); 
    </script> 

положите это в документ не на php следующим образом:

//autocomplete function 
    $(document).ready(function(){ 
     $("#showresults").on("click", ".resultsdb", function(){ 
      $("#showresults").hide(); 
     }); 

     $("#autocomplete").keyup(function() 
     //.... 
+0

thx! но не работает ни – user3292312

+0

, как сказал Боб Кхин, возвращая пустую строку, когда ничего не найдено, и удалите скрипт, так как это также возврат, и сообщение никогда не пусто ... – reyaner

+0

СПАСИБО ВАМ ОЧЕНЬ! он работает так, как ожидалось сейчас! :) – user3292312

0

Может быть, вы должны проверить $ минусы:

public function autocomplete($dbsearch) { 
    $cons = $this - > dbh - > prepare("select * from clients where cl_name like :dbsearch"); 

    $cons - > execute(array(':dbsearch' = > '%' .$dbsearch. '%')); 

    if (count($cons) > 0) { 
     while ($dbrow = $cons - > fetch()) { 
      $data = $dbrow["cl_name"]; 
      $id = $dbrow["cli_id"]; 

      echo "<a class='resultsdb' href=\"javascript:selectItem (".$id.",'".$data."')\">".$data."</a><br>"; 
     } ?> 
    } else { 
     $data = ''; 
    } 

    <script type = "text/javascript"> 
     $(document).ready(function() { 
      $(".resultsdb").click(function() { 
       $("#showresults").hide(); 
      }); 
    }); </script> 
<?php 
    } 
// end autocomplete 
} ?> 
+0

привет, спасибо за ваш вклад! к сожалению, это не меняет результат. все еще не получаю сообщение об ошибке :( – user3292312

+0

заработал, как и ожидалось, с ответом Райянера, но thx в любом случае;) – user3292312

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