根据类别动态自动完成
Dynamically autocomplete based on category
当我尝试使用 codeigniter 创建一个基于组合框的具有动态值的自动完成时,我遇到了问题,
我试过使用 ajax 但没有成功。
这是我的 ajax 代码,用于调用类别中的项目
<script type="text/javascript">
$(document).ready(function() {
$("#jenis").change(function(){
$.ajax({
type : "POST",
url: "<?php echo base_url(); ?>whz/admin/get_item",
dataType: "html",
data : "item=" + $("#jenis").val(),
success: function(data)
{
$("#showitem").text(data);
}
});
});
});
</script>
这是我的自动完成 jquery 代码
<div id="showitem">
<script>
$(function() {
var availableTags = [
<?php foreach ($item as $row){
echo '"'.$row->item_name.'",';}?>
];
$( "#autotags" ).autocomplete({
source: availableTags
});
});
</script>
</div>
这是我的控制器
public function get_item()
{
$this->load->model('whz_model');
$category = $this->input->post('item');
$item=$this->whz_model->get_item_by_cat($category);
$script = '
$(function() {
var availableTags = [';
foreach ($item as $row)
{
$script .= '"'.$row->item_name.'",';
}
$script .= '];
$( "#autotags" ).autocomplete({
source: availableTags
});
});';
echo $script;
}
我正在考虑使用 json 作为另一种选择,但我仍然没有足够的使用经验。
抱歉英语不好,
感谢您的帮助
这仅基于文档,因为我手头没有可以尝试的系统。
你告诉 jQuery 你的 AJAX 响应是 "html"
这意味着你加载的 JavaScript 永远不会被执行,我相信。如果您将数据加载为 "script"
可能会起作用,但更好的方法确实是使用 JSON.
您的 AJAX 调用将如下所示:
<script type="text/javascript">
$(document).ready(function() {
$("#jenis").change(function(){
$.ajax({
type : "POST",
url: "<?php echo base_url(); ?>whz/admin/get_item",
dataType: "json",
data : "item=" + $("#jenis").val(),
success: function(data)
{
availableTags = data;
}
});
});
});
</script>
使用这样的控制器:
public function get_item()
{
$this->load->model('whz_model');
$category = $this->input->post('item');
$item=$this->whz_model->get_item_by_cat($category);
$this->output
->set_content_type('application/json')
->set_output(json_encode($item)));
}
您必须在全局范围内公开变量 availableTags
才能正常工作,您可以通过将 DOM 更改为
来实现
<div id="showitem">
<script>
$(function() {
availableTags = [
<?php foreach ($item as $row){
echo '"'.$row->item_name.'",';}?>
];
$( "#autotags" ).autocomplete({
source: availableTags
});
});
</script>
</div>
您可能还想将其公开为 window.availableTags
,以便您可以在浏览器的控制台中检查它的值。
如开头所述,我没有对此进行测试,但我相信它应该有效。
我已经用我在互联网上找到的另一种方法修复了它,它可能不是最好的但对我有用,
这是 link
http://www.danielrosca.ro/blog/en/codeigniter-autocomplete/
谢谢大家的回答
当我尝试使用 codeigniter 创建一个基于组合框的具有动态值的自动完成时,我遇到了问题, 我试过使用 ajax 但没有成功。
这是我的 ajax 代码,用于调用类别中的项目
<script type="text/javascript">
$(document).ready(function() {
$("#jenis").change(function(){
$.ajax({
type : "POST",
url: "<?php echo base_url(); ?>whz/admin/get_item",
dataType: "html",
data : "item=" + $("#jenis").val(),
success: function(data)
{
$("#showitem").text(data);
}
});
});
});
</script>
这是我的自动完成 jquery 代码
<div id="showitem">
<script>
$(function() {
var availableTags = [
<?php foreach ($item as $row){
echo '"'.$row->item_name.'",';}?>
];
$( "#autotags" ).autocomplete({
source: availableTags
});
});
</script>
</div>
这是我的控制器
public function get_item()
{
$this->load->model('whz_model');
$category = $this->input->post('item');
$item=$this->whz_model->get_item_by_cat($category);
$script = '
$(function() {
var availableTags = [';
foreach ($item as $row)
{
$script .= '"'.$row->item_name.'",';
}
$script .= '];
$( "#autotags" ).autocomplete({
source: availableTags
});
});';
echo $script;
}
我正在考虑使用 json 作为另一种选择,但我仍然没有足够的使用经验。
抱歉英语不好, 感谢您的帮助
这仅基于文档,因为我手头没有可以尝试的系统。
你告诉 jQuery 你的 AJAX 响应是 "html"
这意味着你加载的 JavaScript 永远不会被执行,我相信。如果您将数据加载为 "script"
可能会起作用,但更好的方法确实是使用 JSON.
您的 AJAX 调用将如下所示:
<script type="text/javascript">
$(document).ready(function() {
$("#jenis").change(function(){
$.ajax({
type : "POST",
url: "<?php echo base_url(); ?>whz/admin/get_item",
dataType: "json",
data : "item=" + $("#jenis").val(),
success: function(data)
{
availableTags = data;
}
});
});
});
</script>
使用这样的控制器:
public function get_item()
{
$this->load->model('whz_model');
$category = $this->input->post('item');
$item=$this->whz_model->get_item_by_cat($category);
$this->output
->set_content_type('application/json')
->set_output(json_encode($item)));
}
您必须在全局范围内公开变量 availableTags
才能正常工作,您可以通过将 DOM 更改为
<div id="showitem">
<script>
$(function() {
availableTags = [
<?php foreach ($item as $row){
echo '"'.$row->item_name.'",';}?>
];
$( "#autotags" ).autocomplete({
source: availableTags
});
});
</script>
</div>
您可能还想将其公开为 window.availableTags
,以便您可以在浏览器的控制台中检查它的值。
如开头所述,我没有对此进行测试,但我相信它应该有效。
我已经用我在互联网上找到的另一种方法修复了它,它可能不是最好的但对我有用, 这是 link
http://www.danielrosca.ro/blog/en/codeigniter-autocomplete/
谢谢大家的回答