2014-10-04 59 views
1

我建設使用jQuery UI自動完成搜索(http://jqueryui.com/demos/autocomplete/jQuery的自動完成自定義HTML結果

我也利用jQuery UI的自動完成HTML擴展,所以我可以根據類別中,風格很好的搜索和顯示的圖標搜索結果是

我的問題是,當我點擊它看起來像這樣的結果:

(Category Icon) Pink Floyd - Category 

它出來像這樣在搜索輸入字段:

<div class="search_icons"><img src="images/ico/search_icon_rock.png" class="search_pic_radius"></div>Pink floyd<div class="autocomplete_category"> Rock</div><div class="artist_id_search">15</div><div class="artist_name_search">pink-floyd</div> 

這是我的search.php看起來像:

if (isset($_GET['term'])){ 
    $return_arr = array(); 

    try { 
     $conn = new PDO("mysql:host=".DB_SERVER.";port=8889;dbname=".DB_NAME, DB_USER, DB_PASSWORD); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $conn->prepare('SELECT url_name,name,category,id FROM artists WHERE name LIKE :term OR category LIKE :term LIMIT 10'); 
     $stmt->execute(array('term' => '%'.$_GET['term'].'%')); 

     while($row = $stmt->fetch()) { 
      if($row['category'] == '1') { $category_icon = '<div class="search_icons"><img src="images/ico/search_icon_rock.png" class="search_pic_radius"></div>'; } 
      if($row['category'] == '2') { $category_icon = '<div class="search_icons"><img src="images/ico/search_icon_pop.png" class="search_pic_radius"></div>'; } 

      $return_arr[] = $category_icon . $row['name'] . '<div class="autocomplete_category"> ' . $row['category'] . '</div>'. '<div class="artist_id_search" id="artist_id_search">' . $row['id'] . '</div>'. '<div class="artist_name_search" id="artist_name_search">' . $row['url_name'] . '</div>' ; 

     } 

    } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
    } 

    echo json_encode($return_arr); 
} 

我想要實現的是,上自動完成的東西,當點擊它應提交表單和上次值2個div的artist_id_searchartist_name_search等提交下一個頁面將成爲whatever.php?id=15&artist=pink-floyd

我曾嘗試是要從具備分割功能搜索字符串不必要的部分,但那時我剛剛結束了與idurl_name參數在搜索領域並沒有真正實現任何東西,但它並沒有真正可靠地改變圖標名稱等。

回答

1

好,而不是從你在JSON取得PHP服務返回的HTML,你應該在

[ 
{"id":"15","name":"pink-floyd","value":"Pink Floyd"}, 
{... 
] 

形式傳回正確的JSON像當年處理它在你的JavaScript爲:

$("#your_input_id").autocomplete({ 
     source: "your_php_page.php", 
     minLength: 2, 
     select: function(event, ui) {//callback function when you select an item 
     log(ui.item ? 
      "Selected: " + ui.item.value + " aka " + ui.item.id : 
      "Nothing selected, input was " + this.value); 
     window.location.href = 'whatever.php?id=ui.item.id&artist=ui.item.name'; 
     } 
    }); 

希望你得到它排序:)

+0

我可以從PHP返回2倍的JSON?一旦找到搜索結果中顯示的內容,並且一旦您點擊其中一個搜索結果,就再次顯示值。 – maricos 2014-10-04 12:30:16

+0

爲什麼你不必要地想回傳兩次相同的數據,這是一個性能損失,反正不是必需的。我想你應該這樣做來從你的自定義CSS中應用特定的樣式,但是你可以通過操作JavaScript中的數據並將其填充到DOM元素的innerHTML屬性中來實現。 – 2014-10-04 12:44:24

+0

你是完全正確的,我現在已經整理出來了,構建了一個合適的JSON,但是我確實遇到了一個問題,我怎樣才能從搜索頁面的JSON中訪問這個東西?在PHP中,它現在看起來像這樣:'$ return_arr [] = array('label'=> $ category_icon。$ row ['name']。'

' . $row['category'] . '
','artist_id'=> $ row ['id'], 'url_name'=> $ row ['url_name']);'你可以在JSON中看到我想要訪問的值是'artist_id'和'url_name'在搜索頁面上我應該無法通過'ui訪問它們.item.url_name'和'ui.item.artist_id'? – maricos 2014-10-04 13:02:38