1

私のページにはjQueryオートコンプリートスクリプトがあり、それが機能するフィールドに入力すると、3文字の後に要求されたように、予想される数の提案を含むドロップがポップアップします...ドロップダウンのテキスト。

提案の1つを選択しているかのようにドロップダウンにマウスを合わせると、提案がある各行のハイライトが狭いバーに表示されますが、空のハイライトの1つを選択するとフィールドが空になります。これは驚くべきことではありません。返されるデータの扱いがよくわかりません。これらのフォーラムの他の投稿のオートコンプリートの例で非常に単純で複雑なコードを見てきましたが、私が理解したものを使用すると、通常、ドロップダウンがまったく表示されないほどに壊れています。したがって、私は恥ずかしがらずに、機能するコードを提供してくれる人を探しています。そうすれば、コードを分解して、どのように機能するかを理解できます。

私の基本的なJSコードは次のとおりです。

    $("#tf_txt_CLIENTNAME").autocomplete({
        source: "search.php",
        minLength: 3,//search after three characters
        dataType: 'json',
        select: function(event,ui){

            //do domething

        }

それは私が正しく理解できない何かをする領域です。私が言ったように、私はここで言及するにはそのスペースであまりにも多くのコードのバリエーションを試しました、そしてそれらのすべてはそれを完全に壊しました。

search.phpは、「bra」の入力に対して次のJSON出力を生成します。

[{"txt_CLIENTNAME":"Braedon"},{"txt_CLIENTNAME":"Bradly"}]

次のPHPソースから(別のWebソースから借用および変更):

<?php
require_once 'includes/dbiconnect.php';
require_once 'includes/sqlfunctions.php';

$term = trim(strip_tags(addslashes($_GET['term']))); //retrieve the search term that autocomplete sends

$qstring = "SELECT `txt_CLIENTNAME` FROM `tbl_client_details` WHERE `txt_CLIENTNAME` LIKE '%".$term."%'";
$result = mysqli_query($db_link,$qstring); //query the database for entries containing the term

while ($row = mysqli_fetch_assoc($result)) {//loop through the retrieved values
        $row['txt_CLIENTNAME']=htmlentities(stripslashes($row['txt_CLIENTNAME']));
        $row_set[] = $row; //build an array
}
echo json_encode($row_set); //format the array into json data
?>

見つけたものを表示し、選択したものをテキストフィールドの値に入力したいだけです。次に、入力する他のフィールド(会社、電話番号、電子メール)を、そのフィールドのonchangeイベントによってトリガーされる$ .POSTを使用して更新できます(これを行うためのより良い方法があると確信していますが、方法は理解しています。今のところそれを行うために)。

jQuery1.7.2とjQueryUI1.8.22を使用しています。tabsコンポーネントなしで最新のjqueryツールボックスもロードしていますが、それを削除しても違いはありません。

前もって感謝します、

ブレイドン

4

1 に答える 1

2

Jquery UIガイドに従って、

JSONにはラベルまたは値(あるいはその両方)が含まれている必要があります

以下のようにjsonを変更する必要があります

while ($row = mysqli_fetch_assoc($result)) {//loop through the retrieved values
        $row['txt_CLIENTNAME']=htmlentities(stripslashes($row['txt_CLIENTNAME']));
        $row_set[] = array('label'=>'txt_CLIENTNAME','value'=>$row['txt_CLIENTNAME']); //build an array
}
于 2012-10-02T13:59:01.180 に答える