1

我們必須加上jQuery UI的自動完成v1.8.14一個文本框jQuery的自動完成拋出JS錯誤在IE7獨立

它基本上的偉大工程,不只是在IE7獨立一定的情況下錯誤。我們假設用戶正在輸入一個字母,並且第一個AJAX請求會自動完成結果。響應尚未返回,但用戶輸入另一個字母。此時,第一個請求將被中止爲默認值,第二個請求將開始檢索新搜索字符串的新結果。這是有意義的,因爲備份帶寬和執行時間損失,但不幸的是它在IE7上失敗。

下圖顯示了在Firefox中使用Firebug時發生的情況。基本上所有瀏覽器除了IE7(甚至IE6和IE8)都能正常工作。

Attached image showing the behavior in Firebug

有沒有人見過這樣的事?最終有人知道是否有可能迫使自動完成程序完成啓動的請求而不是中止它們?任何其他想法?

非常感謝,任何幫助,高度讚賞!

回答

1

我們終於通過將呼叫到一個try-catch塊,我解決了這個問題如果在IE7中觸發錯誤錯誤。

這可能不是完美的方式,但中止請求的好處對其餘瀏覽器仍然有效。

1

我有一個預感,你只是使用字符串值的source選項,並提供一個URL。如果正在進行中,您正確地處理了AJAX請求。 Check out this snippet從窗口小部件的源代碼:

url = this.options.source; 
this.source = function(request, response) { 
    if (self.xhr) { 
     self.xhr.abort(); // <-- Problematic line. 
    } 
    self.xhr = $.ajax({ 
     url: url, 
     data: request, 
     dataType: "json", 
     autocompleteRequest: ++requestIndex, 
     success: function(data, status) { 
      if (this.autocompleteRequest === requestIndex) { 
       response(data); 
      } 
     }, 
     error: function() { 
      if (this.autocompleteRequest === requestIndex) { 
       response([]); 
      } 
     } 
    }); 
} 

如果你正在傳遞一個字符串source參數,你可以很容易地更換與該手工做的AJAX調用的函數(和你不放棄的請求):

source: function (request, response) { 
    $.ajax({ 
     url: "your_url", 
     data: request.term, 
     dataType: "json", 
     success: function(data, status) { 
      response(data); 
     } 
    }); 
} 

(未經測試,但應該讓你在正確的方向前進)