gpt4 book ai didi

jQuery 自动完成插件 pengoworks 版本不起作用

转载 作者:行者123 更新时间:2023-12-01 05:02:13 24 4
gpt4 key购买 nike

您好,我正在使用 jQuery 插件(pengoworks 版本),但我遇到了一个问题...当我最初在文本框中输入内容时,它会弹出建议框。但是,在我在文本框中输入几个字母后,如果我暂停,然后继续输入,它只会过滤掉下面建议框中填充的内容,而不是再次运行查询以获得新结果。但每次我在初次暂停后按后退键时,它都会重新运行查询......我希望您能理解我在说什么。抱歉,有任何不清楚的地方,我是编程新手。我将提供我的 html 页面和我的 php 页面。

 <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title></title>
<script type="text/javascript" src="jquery-1.7.1.js"></script>
<script type="text/javascript" src="jquery.autocomplete.js"></script>
<link href="jquery.autocomplete.css" rel="stylesheet" type="text/css" />


<script type="text/javascript">
$(document).ready(function() {
$('#input_box').autocomplete("autocomplete_search.php");

})
</script>
</head>

<body>

<input type="text" name="input_box" value="" id="input_box" />

</body>
</html>

这是我的 PHP 部分。

    <?php
include 'fh.inc.db.php';

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or
die ('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));

$location = htmlspecialchars(trim($_GET['q'])); //gets the location of the search

if(is_numeric($location)) {

$query = "SELECT
zipcode_id
FROM
user_zipcode
WHERE
zipcode_id LIKE '%$location%'
ORDER BY zipcode_id DESC LIMIT 10";
$result = mysql_query($query, $db) or die(mysql_error($db));

} elseif(is_string($location)) {

$query = "SELECT
city
FROM
user_zipcode
WHERE
city LIKE '%$location%'
ORDER BY city DESC LIMIT 10";
$result = mysql_query($query, $db) or die(mysql_error($db));


}


while($row = mysql_fetch_assoc($result)) {

extract($row);
if(is_numeric($location)){
echo "$zipcode_id \n";
}elseif(is_string($location)){
echo "$city \n";
}

}

?>

最佳答案

编辑:插件初始化中的错误

插件中似乎存在一个棘手的错误,使您传递的选项 matchSubset: 0 被忽略并更改为 1。

在初始化期间,会根据作为第二个参数传递的选项和一些默认值构建一个 options 对象:

...
options.delay = options.delay || 400;
options.matchCase = options.matchCase || 0;
options.matchSubset = options.matchSubset || 1;
...

这种做法和数值变量有一个问题:matchSubset: 0 在条件语句中返回 false!在我们的例子中,matchSubset 将始终等于 1!

我明白为什么要这样做。您可以使用相同的符号来检查变量是否未定义,因为它也会返回 false。但在数字的情况下,它不能按预期工作。

如果您无法使用其他插件,我建议您更改默认选项的合并方式。例如,您可以这样做:

//options.matchSubset = options.matchSubset || 1;
options.matchSubset = typeof matchSubset !== undefined
? options.matchSubset
: 1;

您还可以创建一个 defaults 对象文字并使用 $.extend() 来合并默认值和选项,就像 jquery 插件中通常所做的那样。

<小时/>

初始答案

该插件默认使用缓存系统。如果当前查询不在缓存中,插件会检查是否存在子集。

假设您输入“Foo”,插件会进行查询并缓存结果。然后添加一个“t”,这将导致查询“Foot”。该插件不会找到“Foot”的条目,但会找到“Foo”的条目,因此它将过滤此列表而不是发出新请求。

// "q" is the query text
function loadFromCache(q) {
if (!q) return null;
if (cache.data[q]) return cache.data[q];
if (options.matchSubset) {
for (var i = q.length - 1; i >= options.minChars; i--) {
var qs = q.substr(0, i);
var c = cache.data[qs];
if (c) {
var csub = [];
for (var j = 0; j < c.length; j++) {
var x = c[j];
var x0 = x[0];
if (matchSubset(x0, q)) {
csub[csub.length] = x;
}
}
return csub;
}
}
}
return null;
};

您可以通过将选项 matchSubset 显式设置为零来控制此行为:

$('#input_box').autocomplete("autocomplete_search.php", { matchSubset: 0 });

来自documentation :

matchSubset (default value: 1)
Whether or not the autocompleter can use a cache for more specific queries. This means that all matches of "foot" are a subset of all matches for "foo". Usually this is true, and using this options decreases server load and increases performance. Remember to set cacheLength to a bigger number, like 10.

关于jQuery 自动完成插件 pengoworks 版本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com