使用 PHP 和 Json 将数据检索到自动完成中。 jQuery UI 1.8.2 的问题

发布于 2024-12-10 21:14:36 字数 1455 浏览 0 评论 0 原文

我制作了一个电影自动完成功能,您可以在其中输入一个字母,它会给您一个建议的电影列表。在每部电影旁边,我还添加了电影的发行日期。

这就是我在 PHP 中解析它的方式:

$tmdb = new TMDb($api_key);
$json = json_decode($tmdb->searchMovie($_GET['term']));
$response = array();
$i=0;
foreach($json as $movie){
    if($i >= 6) break;
    $response[$i]['value'] = $movie->name;
    $response[$i]['label'] = $movie->name . ' <span class="m_rel">(' . date('Y',strtotime($movie->released)).')</span>';

    $i++;
}
echo json_encode($response);

现在,如果我使用 jQuery 1.8.2,一切都会完美运行。

我得到这个结果:

在此处输入图像描述

如果我使用更高版本的 jQuery UI,我会得到这个:

在此处输入图像描述

html 很简单,它只是一种表单,自动完成功能是来自 jQuery 的,所以没什么花哨的。一旦我更改了 UI 的版本,就会出现问题。

有人可以帮我解决这个问题吗?我无法使用 jQuery 1.8.2,因为我遇到了与可拖动和 IE(所有版本)有关的其他问题,这些问题无法解决,因为它是一个已知的错误。

我在安德鲁的惠特克回答之后的 JS:

var movieName = $('#movieName');
movieName.autocomplete({
    source: 'movieInfo.php',
    select: function (event, ui) {
        $(this).val(ui.item.imdbid);
        $(".re5").submit()
    }
})._renderItem = function(ul, item) {
    return $("<li></li>")
        .data("item.autocomplete", item)
        .append("<a>" + item.label + "<span class='m_rel'>" + item.releasedate + "</span></a>")
        .appendTo(ul);
};

“re5”是表单的类。

多谢

I made a movie autocomplete of which you type a letter and it gives you a suggest list of movies. Next to each movie I also added the date the movie was released.

This is how I parse it in PHP:

$tmdb = new TMDb($api_key);
$json = json_decode($tmdb->searchMovie($_GET['term']));
$response = array();
$i=0;
foreach($json as $movie){
    if($i >= 6) break;
    $response[$i]['value'] = $movie->name;
    $response[$i]['label'] = $movie->name . ' <span class="m_rel">(' . date('Y',strtotime($movie->released)).')</span>';

    $i++;
}
echo json_encode($response);

Now, if I use jQuery 1.8.2 everything works perfectly.

I get this result:

enter image description here

Where if I use a later version of the jQuery UI I get this:

enter image description here

The html is simple, its just a form and the autocomplete its the one from the jQuery so nothing fancy. Once I change the version of the UI, the problem happens.

Could someone please help me on how can I solve this issue? I can't use jQuery 1.8.2 because I'm getting other problems with draggable and IE (all versions) which cant be solved since its a known bug.

My JS after Andrew's Whitaker answer:

var movieName = $('#movieName');
movieName.autocomplete({
    source: 'movieInfo.php',
    select: function (event, ui) {
        $(this).val(ui.item.imdbid);
        $(".re5").submit()
    }
})._renderItem = function(ul, item) {
    return $("<li></li>")
        .data("item.autocomplete", item)
        .append("<a>" + item.label + "<span class='m_rel'>" + item.releasedate + "</span></a>")
        .appendTo(ul);
};

're5' is the class of the form.

Thanks alot

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

聽兲甴掵 2024-12-17 21:14:36

使用自动完成功能覆盖菜单项外观的首选方法是替换默认的 _renderItem 方法,如 示例

所以我会做两件事:

  1. 修改你的 PHP,不要在结果中返回标记:

    $tmdb = new TMDb($api_key);
    $json = json_decode($tmdb->searchMovie($_GET['term']));
    $响应=数组();
    $i=0;
    foreach($json 为 $movie){
        if($i >= 6) 中断;
        $response[$i]['value'] = $movie->name;
        $response[$i]['label'] = $movie->name;
        $response[$i]['releasedate'] = $movie->released;
    
        $i++;
    }
    回显 json_encode($response);
    
  2. 重写 _renderItem 方法以在 span 中显示发布日期:< /p>

    $("#selector").autocomplete({ /* 选项 */ })
        .data( "自动完成" )._renderItem = 函数(ul, item) {
            返回 $("
  3. ") .data("item.autocomplete", item) .append("" + item.label + " (" + item.releasedate + ")") .appendTo(ul); };

抱歉,PHP 有点不对劲;我不是这方面的专家。

The preferred way to override the way that menu items look with autocomplete is to replace the default _renderItem method, as shown in this example.

So I would do two things:

  1. Modify your PHP not to return markup in the results:

    $tmdb = new TMDb($api_key);
    $json = json_decode($tmdb->searchMovie($_GET['term']));
    $response = array();
    $i=0;
    foreach($json as $movie){
        if($i >= 6) break;
        $response[$i]['value'] = $movie->name;
        $response[$i]['label'] = $movie->name;
        $response[$i]['releasedate'] = $movie->released;
    
        $i++;
    }
    echo json_encode($response);
    
  2. Override the _renderItem method to display the release date in a span:

    $("#selector").autocomplete({ /* options */ })
        .data( "autocomplete" )._renderItem = function(ul, item) {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a>" + item.label + " <span class='m_rel'>(" + item.releasedate + ")</span></a>")
                .appendTo(ul);
        };
    

Sorry if the PHP is a little off; I'm not an expert there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文