0

Jquery 的自动完成文档似乎有点缺乏,至少对于初学者来说是这样。我已经在网上搜索了很好的教程,但没有找到。

继承人我到目前为止:

HTML:

<div id="addfilter">
    <div id="textwrap">
    <form method="POST" class="homeForm" id="homeForm" action="<?php echo base_url() ?>main/add_filter">
        <input type="text" class="text" id="homeText" name="homeText" placeholder="Add Category"></input>
        <input type="image" class="imginput" src="<?php echo base_url() ?>img/board/icons/add.jpg"id="homeSubmit" value="X"></input>
    </form>
    </div>
</div>

JS:

$().ready(function() {
    $("text").autocomplete("search.php", {
        width: 260,
        matchContains: true,
        selectFirst: false
    });
});

搜索控制器

    public function search()
    {
        $this->thread_model->autocomplete();
    }

自动完成模型

    public function autocomplete()
    {
        $query = $this->db->query('SELECT tag
            , COUNT(*) as num_items
            FROM filter_thread ft
            INNER JOIN filter f
            ON ft.filter_id = f.filter_id
            GROUP BY tag');
        $tagcloud = $query->result_array();
        foreach ($tagcloud as $tags)
        {
            echo $tags;
        }
    }

当我在“formText”中输入文本时,Firebug 没有显示任何发生的事情。我什至不确定模型的输出格式是否正确。任何帮助,将不胜感激!

4

1 回答 1

2

你测试过你的控制器和模型吗?

首先,我会更正您的 jquery:

$(document).ready(function() {
        var url = $("#homeForm").attr("url");
        $("#homeText").autocomplete({
            source: url,
            width: 260,
            matchContains: true,
            selectFirst: false
        });
    });

我建议以其他方式提供 URL,例如表单标签中的属性:

<form url="<?php echo base_url() ?>main/search" .... >

在 jQuery 中的自动完成之前获取该 URL:

var url = $("#homeForm").attr("url")

然后自动完成通过 interm参数发送约束。您应该将查询调整为:

'SELECT tag, COUNT(*) as num_items
            FROM filter_thread ft
            INNER JOIN filter f
            ON ft.filter_id = f.filter_id
            WHERE <YOUR_FIELD_HERE> LIKE("%'.$this->db->escape($_POST['term']).'%")
            GROUP BY tag'

我对 CodeIgniter 不是很熟悉,所以您可能需要纠正一些问题。

最后(也许)一件事是看看自动完成将如何对返回做出反应。

于 2012-05-29T14:04:26.433 回答