0

Scriptaculous js フレームワークの 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>

これはフォーム コントローラーの autoComplete アクションで、入力した文字に対応するユーザーのリストを取得します。

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」で始まるリストを表示する代わりに、ユーザーのリスト全体が表示されるとします。なぜこの問題が発生するのですか? どこで間違ったのですか?

4

1 に答える 1

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

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

于 2009-08-12T12:02:37.350 に答える