Извлечение данных с помощью PHP и Json в автозаполнение.Проблемы с jQuery UI 1.8.2+ - PullRequest
2 голосов
/ 19 октября 2011

Я сделал автозаполнение фильма, в котором вы набираете письмо, и оно предлагает вам список предлагаемых фильмов.Рядом с каждым фильмом я также добавил дату выхода фильма.

Вот как я анализирую это в 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, все работает отлично.

Я получаю такой результат:

enter image description here

Где, если я использую более позднюю версию пользовательского интерфейса jQuery, я получаю это:

enter image description here

HTML простой, его простоформа и автозаполнение его из jQuery, так что ничего особенного.Когда я меняю версию интерфейса, возникает проблема.

Может кто-нибудь помочь мне с решением этой проблемы?Я не могу использовать jQuery 1.8.2, потому что у меня возникают другие проблемы с draggable и 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' - это класс формы.

Большое спасибо

1 Ответ

0 голосов
/ 19 октября 2011

Предпочтительный способ переопределить то, как элементы меню выглядят при автозаполнении, - это заменить метод _renderItem по умолчанию, как показано в этом примере .

Так что я бы сделал две вещи:

  1. Измените ваш 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;
        $response[$i]['releasedate'] = $movie->released;
    
        $i++;
    }
    echo json_encode($response);
    
  2. Переопределите метод _renderItem, чтобы отобразить дату выпускав 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);
        };
    

Извините, если PHP немного отключен;Я не эксперт там.

...