我使用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'开头的那些。为什么我会遇到这个问题?我哪里出错?
答案 0 :(得分: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";
}
现在我只得到以该字母开头的条目。