2013-03-09 18 views
5

Używam jQuery autocompleter do wyszukiwania.Wykonywanie wyszukiwania niewrażliwego na wielkość liter

Z mojego poniższego kodu moje wyszukiwanie dzieje się tylko w przypadku rozróżniania wielkich i małych liter, chcę rozróżniać wielkość liter. np. $array={the king, The king, The man}

I moje wyszukiwanie słów kluczowych to „”, a następnie aktualnie Dostaję tylko wyjście jak {The king, The man} nie otrzymuję the king ponieważ jest małymi literami.

czego chcę, jeśli napiszę "to", powinienem uzyskać wszystkie trzy wyniki.

Proszę mi pomóc rozwiązać mój problem

view.php

<script type="text/javascript"> 
$(document).ready(function() { 
     $(function() { 
       $("#autocomplete").autocomplete({ 


         source: function(request, response) { 

        $.ajax({ url: "<?php echo base_url().'search/suggestions'?>", 
           data: { term: $("#autocomplete").val()}, 
           dataType: "json", 
           type: "POST", 
           success: function(data){ 

             response(data); 
           } 
         }); 
       }, 

       minLength: 3, 
       select: function (a, b) { 
    $(this).val(b.item.value); 
    $(".searchform1").submit() 
} 
       }); 
     }); 
     $('#autocomplete').focus(); 
}); 


    function monkeyPatchAutocomplete() { 

     // Don't really need to save the old fn, 
     // but I could chain if I wanted to 
     var oldFn = $.ui.autocomplete.prototype._renderItem; 

     $.ui.autocomplete.prototype._renderItem = function(ul, item) { 
      var re = new RegExp("^" + this.term, "i") ; 
      var t = item.label.replace(re,"<span style='font-weight:bold;color:Black;'>" + this.term + "</span>"); 
      return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append("<a>" + t + "</a>") 
       .appendTo(ul); 
     }; 
    } 


    $(document).ready(function() { 

     monkeyPatchAutocomplete(); 

     $("#input1").autocomplete({ 
      // The source option can be an array of terms. In this case, if 
      // the typed characters appear in any position in a term, then the 
      // term is included in the autocomplete list. 
      // The source option can also be a function that performs the search, 
      // and calls a response function with the matched entries. 
      source: function(req, responseFn) { 
       addMessage("search on: '" + req.term + "'<br/>"); 
       var re = $.ui.autocomplete.escapeRegex(req.term); 
       var matcher = new RegExp("^" + re, "i"); 
       var a = $.grep(wordlist, function(item,index){ 
        //addMessage("&nbsp;&nbsp;sniffing: '" + item + "'<br/>"); 
        return matcher.test(item); 
       }); 
       addMessage("Result: " + a.length + " items<br/>"); 
       responseFn(a); 
      }, 

      select: function(value, data){ 
       if (typeof data == "undefined") { 
        addMessage('You selected: ' + value + "<br/>"); 
       }else { 
        addMessage('You selected: ' + data.item.value + "<br/>"); 
       } 
      } 
     }); 
    }); 
</script> 
    --------------- 
    --------------- 
     <form class="searchform1" action="<?php echo base_url().'search/searchresult/pgn/grid/'?>" method="POST"> 
         <img src="<?php echo base_url()?>css/images/icons/searchicon.png" style="vertical-align:middle;"/> 
         <input id="autocomplete" value="<?php if(isset($srchvalue)){echo $srchvalue ;} ?>" class="deletable" type="text" name="keywords" style="height: 30px;width: 450px;font-size: 16px;border: 0;border-bottom:solid 4px #dfdfdf;border-top:solid 4px #dfdfdf;" maxlength="70" placeholder=" Search for Title, Author Name, Isbn , Publisher"/> 

         <input type="submit" value="&nbsp;&nbsp;Search&nbsp;&nbsp;" class="searchbtn"/> 
     </form> 
+0

Uwaga: 'sukces()' jest przestarzała. Zamiast tego użyj 'done()'. – itachi

Odpowiedz

4

Unikaj używania dużo podmiotów podobnych. Wyszukiwanie pełnotekstowe jest drogą do zrobienia. W przypadku pełnego przeszukiwania txt domyślnie nie ma znaczenia wielkość liter. Więc nie będziesz miał z tym problemu.

Oto jak zintegrować mysql pełny tekst z CodeIgniter

Using Match and Against in MySQL and CodeIgniter

+0

http://stackoverflow.com/questions/2876789/case-insensitive-for-sql-like-wildcard-statement –

+0

zmodyfikuj mój kod i dodaj swój kod logiczny. A więc przetestujmy to –

+0

Czy to jest miłe, czy też trudno jest zintegrować takie zapytanie z codeigniter? –

0

Czy celowo użyć wrażliwą na sprawy sortowania na stole? Zmiana na sortowanie niewrażliwe na wielkość znaków rozwiąże problem. Innym rozwiązaniem byłoby dopasowanie łańcucha w niższym (lub górnym) przypadku. Coś w tym stylu:

$ this-> db-> lub_like ("LOWER (nazwa_auth_lastname)", strtolower (słowo kluczowe $));

Również wyszukiwanie pełnotekstowe nie jest możliwe, jeśli używać jako silnik InnoDB przechowywania w mysql

Powiązane problemy