我在codeigniter中开发了一个自动完成功能,但问题是如果我们输入两个字母,它匹配2个或超过2个字符,但它只显示1个记录我不知道为什么会发生这种情况。任何人都可以帮助我。
我有3条匹配标准的记录:
当我输入 Ve 时,它会显示 Design&开发,当我输入 Beh 时,它只显示 Vehicle ,因为它应该显示所有三个。所有3条记录包含名称 vehicles ,任何人都可以让我知道我在哪里犯错误
这是我的 php 模型 Get_data.php
public function result($keyword) {
$get_data = $this->db->like('cat_name', $keyword);
$get_data = $this->db->order_by("cat_id", "ASC");
$get_data = $this->db->get('categories');
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html = '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
$html .= $sport;
$html .= "</li>";
return $html;
endforeach;
}
我的php控制器
public function getData() {
$keyword = $this->input->post('keyword');
$html = $this->get_data->result($keyword);
echo $html;
}
以下是我使用的 ajax 查询
function autocomp() {
var min_length = 0;
var keyword = $("#skills").val();
if(keyword.length > min_length) {
$.ajax({
type : "POST",
data : {keyword: keyword},
dataType : 'text',
url : "http://localhost:90/tufuturo/home/getData",
success : function(data) {
$("#resultkeyword").show();
if(data == false) {
$("#resultkeyword").html("<li>No Results Found</li>");
} else {
$("#resultkeyword").html(data);
}
}
});
} else {
$("#resultkeyword").hide();
}
}
function set_item(item) {
$("#skills").val(item);
$("#resultkeyword").html("<li><b>"+item+"</b></li>");
$("#resultkeyword").hide();
}
答案 0 :(得分:4)
仅更新foreach循环
$html = '';
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html .= '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
$html .= $sport;
$html .= "</li>";
endforeach;
return $html;
答案 1 :(得分:2)
返回后,一切都会消失。你在foreach循环中写回归。循环只迭代一次并返回。
需要将li
的开始标记与$html
也会在foreach循环之外返回
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html .= '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
$html .= $sport;
$html .= "</li>";
endforeach;
return $html;// return here
使用num_rows();
检查查询返回结果是否为
$num = $get_data->num_rows();
if($num>0)
{
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html .= '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
$html .= $sport;
$html .= "</li>";
endforeach;
}else{
$html="<li>NO result found</li>";
}
return $html;// return here
答案 2 :(得分:0)
尝试给LIKE命令第三个参数,它允许你将wildcard%放在你想要的位置。我建议在第三个参数中使用'after' 改变这一行 $ get_data = $ this-&gt; db-&gt; like('cat_name',$ keyword); 到
$get_data = $this->db->like('cat_name', $keyword,'after');