2009-08-12 6 views
0

Scriptaculous jsフレームワークのAjax.autocompleter関数を使用してオートコンプリート機能を実装しました。コードは動作していますが、指定した文字と一致するエントリのみを入力する代わりに、リスト全体が表示されます。 これは私のコードです:Ajax.autocompleter関数で全体のリストが作成されています

これは、自動提案されたエントリを取得するためのjs関数です。

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

これは、自動補完ボックスとエントリが入力されるエントリです。

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

はこれがタイプされた文字に対応するユーザのリストを取得するフォームコントローラ内のオートコンプリートアクションです。

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"; 
} 

しかし、私は文字「p」を入力すると仮定し、私は文字「P」で始まるものを表示するのではなく、全体のユーザーのリストを取得します。なぜこの問題が発生するのですか?どこが間違っていたのですか?

答えて

0

まあ、私は答えを見つけました..実際には間違いです。 paramNameオプションをAjax.autocompleter関数に追加し、コントローラ関数の$ _REQUESTメソッドの値を取得する必要があります。

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"; 
} 

ここでは、そのアルファベットで始まるエントリのみを取得します。

関連する問題