2015-11-05 55 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

相關問題