【问题标题】:jquery autocomplete, best way to join displayed datajquery自动完成,加入显示数据的最佳方式
【发布时间】:2013-01-13 12:43:50
【问题描述】:

为了简单起见,我有 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>

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

所以现在如果我搜索,“cam”结果会是这样

camera

我希望结果看起来像

camera 17/09/2013

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

【问题讨论】:

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


    【解决方案1】:

    最简单的方法可能是在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 函数以您希望的方式显示项目。

    在您的情况下,似乎 #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/

    【讨论】:

    • 谢谢你的回答,我的函数现在看起来像这样 $(function() { $("#event").autocomplete({ source: "autocomp.php", id: '', value: '', thedate: '', minLength: 2, select: function(event, ui) { event.preventDefault(); this.value = ui.item.value + " " + ui.item.thedate; $( '#mysqlid').val(ui.item.id); $('#checksub').submit(); } }); });
    • 感谢您的回答,我的代码现在看起来像这样,jsfiddle.net/Hhyz5 问题是日期字段没有与“值”一起显示,但是如果我推回(在浏览器上)日期已填写,一切看起来都如我所愿?
    • 好吧,也许我问的问题有点错误,日期确实填写了,当我从下拉列表中选择一个名称时,但是我怎样才能让日期出现在下拉列表中的结果旁边?
    • 嗯,好的,所以您希望建议项目列表包含日期?这是可行的,我会更新我的答案。
    • 惠特克先生,您给出的直接而准确的答案,效果很好,我只想说我真的很感激,感谢您提供如此宝贵的意见,stacoverflow 的伟大成员
    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多