2015-11-05 93 views
0

标题的道歉。JQuery自动完成不工作,直到页面刷新和/或随机事件后

我有一个页面使用两个脚本,这两个脚本都在相同的表单上。

这是一个自动保存脚本(因为表单上有很多输入,我不希望用户丢失数据)。

<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>

+0

不是按时间间隔触发自动保存功能,而是尝试将其保存在任何字段的“模糊”事件上。我认为这将解决问题。还有不同的方式来处理自动保存。您可以为ex定义一个变量:'var isFormDirty = false;',然后当用户编辑某些内容时,会使其成为'true'。当且仅当'isFormDirty === true'时,才会触发'blur'事件的自动保存。希望你有一些想法! – deepakb

回答

1

通过它的外观开始加载(和不运行太多的测试),你'以同步方式运行你的代码。我的意思是,这一说法:

var availableTags = <?php include('view-job-q-em-search.php'); ?>;

阻止代码的其余部分的执行,因为它解析PHP脚本。 而是包括您availableTags脚本,使用AJAX请求 可用的标签,例如:

var availableTags; 
$.get("tags/getAvailable", function(data) { 
    availableTags = data; 
    $("#sendy_to").autocomplete({ 
     source: availableTags, 
     autoFocus:true 
    }); 
}); 

应该解决的问题。您能否详细说明view-job-q-em-search.php的内容?

+0

当然... while($ row = mysqli_fetch_array($ result)) { \t \t $ dname_list [] = $ row ['sent_to']; } echo json_encode($ dname_list); – Stephen

+0

@Stephen现在我明白了..您正在PHP脚本中运行查询,这会在您刷新页面时阻止其他代码执行。用上面提到的AJAX代替^ – spongeworthy

0

好吧,这是两件事的结合。首先,你完全正确,呼叫需要同步。

最大的问题... 因为我每隔两秒自动保存一次,只要打开表格,我就保存了一个空白行。自动完成查询然后试图用空白条目填充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); 

...的!空的条款列入查询,以便它没有尝试和空行添加到JSON数组。

+0

呵呵,我现在看到了,很棒! – spongeworthy

相关问题