我正在尝试将包含超过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']." ".$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";
}
}
?>
所以我想要与原始代码具有“精确”相同的效果,但是具有轻量级自动完成功能,因为数据库中有超过20 000个项目需要加载。 (2.2MB仅用于选择值...)
所以,如果有人能告诉我这样做的方法,或者更好的方法因为我现在卡住了。
祝你好运, 防暴
答案 0 :(得分: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]史密斯夫人”
我必须提供相同的输入字段值节点:
echo($row_rs_detail['numeroclient']."\t".$row_rs_detail['cl_nom']);
这将转化为相同:“19078 [TAB CHAR]史密斯夫人”
然后正确填充输入字段!
不知道它是否有意义,但它对我有用!
致以最诚挚的问候,并希望它可以帮助别人!
防暴