1

フォームの読み込みを高速化するために、20,000 を超えるアイテム (クライアント情報) を含む選択をオートコンプリート入力フィールドに転送しようとしています。

現在、Dyve オートコンプリート プラグイン ( https://github.com/dyve/jquery-autocomplete.git )を使用しています。

私が直面している問題は、select で行ったようにフィールドにデフォルト値を設定できないことです。

私の元のコードは次のとおりです。

...
<td>
    <a href="#" onClick="document.form1.blank_sel_numeroclient.value = '<?php echo("$row_rs_detail[numeroclient]");?>';">
        <img src="images/blocnote.png" width="20" height="15" alt="Modifier" />
    </a>
</td>
...
<td align="left" colspan="2">
    <select name="blank_sel_numeroclient" id="blank_sel_numeroclient" style="width:475px; text-align:left" >
        <option value="" selected="selected"></option>
        <?php
            do
            {
                echo("<option value=\"".$row_rs_clients['numeroclient']."\">".$row_rs_clients['numeroclient']."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$row_rs_clients['nom']."</option>\n");
            } while ($row_rs_clients = mysql_fetch_assoc($rs_clients));
            $rows = mysql_num_rows($rs_clients);
            if($rows > 0)
            {
                mysql_data_seek($rs_clients, 0);
                $row_rs_clients = mysql_fetch_assoc($rs_clients);
            }
        ?>
    </select>
</td>
...

今私が使用しようとしているコード: メイン HTML

...
<link rel="stylesheet" type="text/css" href="css/jquery.autocomplete.css">
<script src="JavascriptFiles/jquery.autocomplete.min.js" type="text/javascript"></script>
...
<td>
    <!-- This is not working -->        
    <a href="#" onClick="document.form1.blank_sel_numeroclient.value            = '<?php echo($row_rs_clients['numeroclient']);?>';">
        <img src="images/blocnote.png" width="20" height="15" alt="Modifier" />
    </a>
</td>
...
<td align="left" colspan="2">
    <script>
        $(document).ready(function() {
            $('#blank_sel_numeroclient').autocomplete('cedule/liste-client-autocomplete.php',
                {
                    minChars: 1,
                    useCache: false,
                    selectFirst: true,
                    selectOnly: true,
                    sortResults: true
                });
        });
    </script>
    <input type="text" id="blank_sel_numeroclient" name="blank_sel_numeroclient" style="width:475px; text-align:left" />
    <input type="hidden" value="" id="blank_sel_numeroclienthidden" name="blank_sel_numeroclienthidden" />
</td>
...

liste-client-autocomplete.php の内容:

<?php
    // si on reçoit une donnée
    if(isset($_GET['q'])) {
        $q = htmlentities($_GET['q']); // protection

        // connexion à la base de données
        try {
            $bdd = new PDO('mysql:host=somehost;dbname=somedatabase', 'someusername', 'somepassword');
            $bdd->exec("SET CHARACTER SET utf8");
        } catch(Exception $e) {
            exit('Impossible de se connecter à la base de données.');
        }
        // écriture de la requête
        $requete = "SELECT CONCAT_WS('\t',numeroclient,nom) as nom FROM clients WHERE numeroclient LIKE '". $q ."%' ORDER BY LENGTH(numeroclient), numeroclient";
        // exécution de la requête
        $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
        // affichage des résultats
        while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            echo $donnees['nom'] ."\n";
        }
    }
?>

したがって、元のコードと「まったく」同じ効果が必要ですが、軽量のオートコンプリート機能が必要です。これは、DB に 20,000 を超えるアイテムがあるため、ページの読み込みに時間がかかるためです。(選択値だけで2.2MB...)

誰かがこれを行う方法またはより良い方法を教えてくれたら、私は今行き詰まっているので.

宜しくお願いします、Riot

4

1 に答える 1

0

わかりました!

交換することで

...
<td>
    <!-- This is not working -->        
    <a href="#" onClick="document.form1.blank_sel_numeroclient.value            = '<?php echo($row_rs_clients['numeroclient']);?>';">
        <img src="images/blocnote.png" width="20" height="15" alt="Modifier" />
    </a>
</td>
...

...
<td>
    <!-- Seems to work -->        
    <a href="#" onClick="document.form1.blank_sel_numeroclient.value = '<?php echo($row_rs_detail['numeroclient']."\t".$row_rs_detail['cl_nom']);?>';">
        <img src="images/blocnote.png" width="20" height="15" alt="Modifier" />
    </a>
</td>
...

デフォルトの選択の問題を解決するようです。スクリプト呼び出しで「選択」できるようにするには、書式設定を含むオートコンプリート リストに完全な項目を指定する必要があるようです。

したがって、リストのSQLリクエストの結果は次のとおりです。CONCAT_WS('\t',numeroclient,nom)

たとえば、「19078 [TAB CHAR] Mrs Smith」という結果になります。

入力フィールド値ノードを同じように提供する必要があります:

echo($row_rs_detail['numeroclient']."\t".$row_rs_detail['cl_nom']);

どちらも同じに変換されます: "19078 [TAB CHAR] Mrs Smith"

そして、入力フィールドに正しく入力してください!

意味があるかどうかはわかりませんが、私にとってはうまくいきました!

敬具、それが他の誰かを助けることができることを願っています!

暴動

于 2013-04-05T01:22:06.843 に答える