JQuery 自动完成在页面刷新后才工作 and/or 随机事件
JQuery autocomplete not working until after page refresh and/or a random event
为标题道歉。
我有一个页面使用两个脚本,它们都作用于相同的表单。
这是一个自动保存脚本(因为表单上有很多输入,我不希望用户丢失数据)。
<script rel="text/javascript">
$(function () {
$.post("autosave.php", "json");
setInterval(function () {
$.post("autosave.php", $("form").serialize());
}, 2000);
});
</script>
效果很好。 autosave.php 只不过是一个简单的数据库查询,根据从表单获取的 POST 数据更新各个字段。
我还为表单中的电子邮件字段使用了自动完成脚本。
<script rel="text/javascript">
$(function() {
var availableTags = <?php include('view-job-q-em-search.php'); ?>;
$("#sendy_to").autocomplete({
source: availableTags,
autoFocus:true
});
});
</script>
这也很好用,这里的 PHP 脚本只是一个返回 json 数组的简单数据库查询。
然而,它们不能很好地协同工作,但它们确实是一种时尚。
有趣的是,如果我在表单的一个文本框中输入一个字符,然后刷新,自动完成功能开始工作,但在第一次加载页面时不会。就像在自动竞争开始之前等待自动保存执行它的第一个动作一样。
我对 Jquery 足够精通,可以让这些东西发挥作用,但还不够好,无法发现异常,所以任何帮助或想法来让这项工作发挥作用都是非常好的。
我还在使用通用外部脚本 jquery.min、jquery、ui,它们在 <head>
[=15= 中的页面开头加载]
从外观上看(没有 运行 太多测试),您是 运行 同步方式的代码。我的意思是这个声明:
var availableTags = <?php include('view-job-q-em-search.php'); ?>;
正在阻止其余代码的执行,因为您的服务器正在解析 PHP 脚本。
不要为可用标签包含脚本,而是使用 AJAX 来请求标签
可用,例如:
var availableTags;
$.get( "tags/getAvailable", function( data ) {
availableTags = data;
$("#sendy_to").autocomplete({
source: availableTags,
autoFocus:true
});
});
应该可以解决问题。 view-job-q-em-search.php
的内容可以详细说一下吗?
好的,这是两件事的结合。首先,你完全正确,调用需要同步。
最大的问题...
因为我每两秒自动保存一次,所以我一打开表格就保存了一个空白行。自动完成的查询然后试图用空白条目填充 json 数组,但它不喜欢它。
解决方法是添加...
$dname_list = array();
while($row = mysqli_fetch_array($result))
{
if(!empty($row['sent_to'])){
$dname_list[] = $row['sent_to'];
}
}
echo json_encode($dname_list);
...查询中的 !empty 子句,这样它就不会尝试将空行添加到 json 数组。
为标题道歉。
我有一个页面使用两个脚本,它们都作用于相同的表单。
这是一个自动保存脚本(因为表单上有很多输入,我不希望用户丢失数据)。
<script rel="text/javascript">
$(function () {
$.post("autosave.php", "json");
setInterval(function () {
$.post("autosave.php", $("form").serialize());
}, 2000);
});
</script>
效果很好。 autosave.php 只不过是一个简单的数据库查询,根据从表单获取的 POST 数据更新各个字段。
我还为表单中的电子邮件字段使用了自动完成脚本。
<script rel="text/javascript">
$(function() {
var availableTags = <?php include('view-job-q-em-search.php'); ?>;
$("#sendy_to").autocomplete({
source: availableTags,
autoFocus:true
});
});
</script>
这也很好用,这里的 PHP 脚本只是一个返回 json 数组的简单数据库查询。
然而,它们不能很好地协同工作,但它们确实是一种时尚。
有趣的是,如果我在表单的一个文本框中输入一个字符,然后刷新,自动完成功能开始工作,但在第一次加载页面时不会。就像在自动竞争开始之前等待自动保存执行它的第一个动作一样。
我对 Jquery 足够精通,可以让这些东西发挥作用,但还不够好,无法发现异常,所以任何帮助或想法来让这项工作发挥作用都是非常好的。
我还在使用通用外部脚本 jquery.min、jquery、ui,它们在 <head>
[=15= 中的页面开头加载]
从外观上看(没有 运行 太多测试),您是 运行 同步方式的代码。我的意思是这个声明:
var availableTags = <?php include('view-job-q-em-search.php'); ?>;
正在阻止其余代码的执行,因为您的服务器正在解析 PHP 脚本。 不要为可用标签包含脚本,而是使用 AJAX 来请求标签 可用,例如:
var availableTags;
$.get( "tags/getAvailable", function( data ) {
availableTags = data;
$("#sendy_to").autocomplete({
source: availableTags,
autoFocus:true
});
});
应该可以解决问题。 view-job-q-em-search.php
的内容可以详细说一下吗?
好的,这是两件事的结合。首先,你完全正确,调用需要同步。
最大的问题... 因为我每两秒自动保存一次,所以我一打开表格就保存了一个空白行。自动完成的查询然后试图用空白条目填充 json 数组,但它不喜欢它。
解决方法是添加...
$dname_list = array();
while($row = mysqli_fetch_array($result))
{
if(!empty($row['sent_to'])){
$dname_list[] = $row['sent_to'];
}
}
echo json_encode($dname_list);
...查询中的 !empty 子句,这样它就不会尝试将空行添加到 json 数组。