2011-10-19 5 views
2

私はあなたに文字を入力するムービーのオートコンプリートを作成し、ムービーの候補リストを提供します。各ムービーの次に、ムービーがリリースされた日付も追加しました。PHPとJsonを使ってデータをオートコンプリートに取り込む。 jQuery UI 1.8.2以降の問題

は、これは私が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

HTMLはシンプルですが、そのわずか:私はjQueryのUIの新しいバージョンを使用している場合、私はこれを取得

enter image description here

をフォームとオートコンプリートはjQueryのものなので何も気にしません。 UIのバージョンを変更すると、問題が発生します。

誰かがこの問題を解決するにはどうすれば助けてくれますか?私はdraggableとIE(すべてのバージョン)の既知のバグから解決できない他の問題が出ているので、jQuery 1.8.2を使用することはできません。アンドリューのウィテカーの解答後

マイ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は' 形式のクラスです。このexampleに示すよう

+0

問題はあなたのjs htmlコードにあるはずです。そのコードも追加しないでください。 – mbouzahir

答えて

0

たくさん

おかげでメニュー項目がオートコンプリートに見えるような方法を上書きするための好ましい方法は、デフォルト_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. spanにリリース日を表示するために_renderItemメソッドをオーバーライドします:

    $("#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が少しオフの場合、私はそこの専門家ではない。

+0

こんにちはAndrew!私はあなたから答えが得られたと思っていた。これは私が私のjavascriptに関して使用していることに注意してください:http://stackoverflow.com/questions/7745577/jquery-autocomplete-on-select-alert-a-value-of-which-is-in-その提案。私はあなたのために与えられた答えです。私はまだそのIMDbIDを使用しています。だから私の現在のjavascriptは(上記の私の編集をチェックしてください)、それは日付を表示しません。ありがとう。 – jQuerybeast

+0

@jQuerybeast:うーん、あなたは上記のPHPを前の答えのPHPと組み合わせることができるはずです...あなたは特に何を持っていますか? –

+0

PHPはまだ同じです。 $ response [$ i] ['imdbid'] = $ movie-> imdb_idの余分な1行を除いて、最後にIMDb IDがフォームを提出する。私は何のエラーもない、ちょうど日付が表示されていません。 – jQuerybeast

関連する問題