2009-08-12 6 views
0

J'ai implémenté la fonctionnalité d'achèvement automatique à l'aide de la fonction Ajax.autocompleter du framework JavaScript Scriptaculous. Le code fonctionne, mais la liste entière est remplie au lieu de remplir uniquement les entrées correspondant à la lettre que j'ai spécifiée. Ceci est mon code:La liste complète est remplie dans la fonction Ajax.autocompleter

Ceci est la fonction js pour obtenir les entrées suggérées automatiquement.

new Ajax.Autocompleter("autocomplete", "autocomplete_choices", 
         "http://localhost/FormBuilder/forms/autoComplete",{}); 

Ceci est la zone de saisie automatique et les entrées où les entrées sont remplies.

<input type="text" id="autocomplete" name="autocomplete_parameter"/> 
    <div id="autocomplete_choices" class="autocomplete"></div> 

Et ceci est l'action autoComplete dans le contrôleur de formes où obtenir la liste des utilisateurs correspondant à la lettre dactylographiée.

function autoComplete() 
{ 
    $this->set('users',$this->User->find('all',array('fields'=>array('User.id','User.name'), 
                'conditions'=>array('User.name LIKE' => $this->data['User']['name'].'%') 
                ) 
             ) 
    ); 
    $this->layout = "ajax"; 
} 

Mais supposons que si je tape la lettre « p », je reçois la liste de l'ensemble de l'utilisateur au lieu d'afficher ceux commençant par la lettre « p ». Pourquoi ai-je ce problème? Où ai-je mal tourné?

Répondre

0

Eh bien, j'ai trouvé la réponse .. En fait une erreur. Je devrais ajouter l'option paramName à la fonction Ajax.autocompleter et devrait obtenir la valeur dans la méthode $ _REQUEST dans la fonction de contrôleur.

new Ajax.Autocompleter("autocomplete", "autocomplete_choices", 
         "http://localhost/FormBuilder/forms/autoComplete", 
         {paramName:"autocomplete"}); 

function autoComplete() 
{ 
    $userName=$_REQUEST['autocomplete']; 
    $this->set('users',$this->User->find('all',array(
            'fields'=>array('User.id','User.name'), 
          'conditions'=>array('User.name LIKE' => $userName.'%')) 
                    ) 
      ); 
    $this->layout = "ajax"; 
} 

Maintenant, je ne reçois que les entrées commençant par cet alphabet.