jquery autocomplete,加入显示数据的最佳方式

时间:2013-01-13 12:43:51

标签: php javascript jquery-ui jquery-autocomplete jquery-ui-autocomplete

为了简单起见,我有jquery自动完成工作,在同一输入字段中,从数组中连接/显示多行的最佳方法是什么。

我的php看起来像这样

$return_arr = array();

/* If connection to database, run sql statement. */
if ($conn)
{
    $fetch = mysql_query("SELECT * FROM alltickets where name like '%" . mysql_real_escape_string($_GET['term']) . "%'");

    /* Retrieve and store in array the results of the query.*/
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['id'] = $row['id'];
        $row_array['value'] = $row['name'];
        $row_array['thedate'] = $row['date'];

        array_push($return_arr,$row_array);
    }
}

/* Free connection resources. */
mysql_close($conn);

/* Toss back results as json encoded array. */
echo json_encode($return_arr);

我的html页面看起来像

>Please enter what you are looking for</p>

<p class="ui-widget">

<label for="event">Please start entering your event </label>

<input type="text" id="event"  name="event" /></p>

<input type="hidden" id="mysqlid" name="mysqlid" />


<p><input type="submit" name="submitBtn" value="Submit" /></p>

</fieldset>
</form>

<script type="text/javascript">
$(function() {

            $("#event").autocomplete({
                source: "autocomp.php",
                minLength: 2,
                select: function(event, ui) {
                    $('#mysqlid').val(ui.item.id);
                }
            });

        });
</script>

什么是让“日期”显示在名为event的文本输入字段中的最有效方法,就在“name”之后

所以现在如果我搜索,“cam”结果将如此

camera

我希望结果看起来像

camera 17/09/2013

我可以看到有几种方法可以做到这一点,最好的方法是什么?谢谢

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是在select事件处理程序中执行此操作。请记住也要阻止事件的默认操作:

$("#event").autocomplete({
    source: "autocomp.php",
    minLength: 2,
    select: function(event, ui) {
        event.preventDefault();
        this.value = ui.item.value + " " + ui.item.thedate;

        $('#mysqlid').val(ui.item.id);
    }
});

示例: http://jsfiddle.net/J5rVP/33/


如果您想在建议列表中显示日期,您可以选择以下几个选项:

  1. 使用您想要显示的整个字符串填充value属性(在服务器上执行工作)
  2. 操作从服务器获取的响应以正确填充value属性
  3. 覆盖_renderItem功能,以您希望的方式显示项目。
  4. 在你的情况下,似乎#3可能是最好的方式,所以这就是你将如何做到这一点:

    $("#event").autocomplete({
        source: "autocomp.php",
        select: function (event, ui) {
            event.preventDefault();
            this.value = ui.item.value + " " + ui.item.thedate;
        }
    }).data("autocomplete")._renderItem = function (ul, item) {
        return $("<li>")
            .data("item.autocomplete", item)
            .append("<a>" + item.label + " " + item.thedate + "</a>")
            .appendTo(ul);
    };
    

    示例: http://jsfiddle.net/J5rVP/34/