2009-08-20 202 views
2

作品不工作精美,Firefox和Chrome,但即給出一個錯誤:jQuery的自動完成功能在IE

「的名字爲空或不是對象」

我已經發布了在IE失敗的行以粗體顯示。

$("#toemail").autocomplete(emails, { 
    minChars: 0, 
    width: 310, 
    matchContains: true, 
    autoFill: false, 
    formatItem: function(row, i, max) { 
     return i + "/" + max + ": \"" + row.name + "\" [" + row.to + "]"; 
    }, 
    formatMatch: function(row, i, max) { 
     **return row.name + " " + row.to;** 
    }, 
    formatResult: function(row) { 
     return row.to; 
    } 
}); 

編輯:我想通了......下面回答。

回答

5

我覺得這是JSON列表中最後一項的最後一個逗號。看起來像FF不在乎,但IE做到了。

+0

如果你知道了,我會將這個問題標記爲答案,所以人們知道。 – localshred 2009-08-20 14:42:16

+1

我不認爲系統允許你將自己的問題標記爲48小時 – leora 2009-08-20 18:56:55

0

什麼是錯誤信息?你有沒有使用visual stuido/script debugger/ie8開發者工具來實際進入js並分析最大對象行&,看看它們是什麼?

按如下所示添加調試器語句,在錯誤發生之前它將打入調試器。

formatMatch: function(row, i, max) { 
      debugger; 
      return row.name + " " + row.to; 
     }, 
0

出於某種原因,IE在頁面加載時調用formatItem函數。如果您爲它們提供自定義函數,formatMatch和formatResult也會發生同樣的情況。問題是當IE調用這些函數時,它不提供任何參數並導致錯誤。

我通過修改插件腳本本身來解決這個問題,在嘗試使用它之前通過添加測試來確定值的存在。我修改了默認formatItem功能從

formatItem:function(row){return row[0];} 

formatItem:function(row){if (row) return row[0]; else return "";} 

和修改填入()函數,我改變了

if(value===false)continue; 

if(!value || value===false)continue; 

此外,如果你提供你自己的c對於formatItem,formatMatch,或formatResult ustom功能,一定要測試該行參數的存在,例如:

formatItem: function(row, i, max) { 

    if (row) 
    return row.name + " (" + row.id + ")"; 
} 
0

我知道這是一個古老的職位,但我有同樣的問題,並想補充我的「解決方案」 - 雖然我覺得它不是一個好的解決方案。

我使用JQuery 1.4.2做一個Ajax請求得到一些XML在自動完成下拉列表顯示,但我一直得到這個錯誤在IE:

「location.protocol」爲空或不是對象

我在網上查看,有幾個消息來源建議回到1.3.2,這是我做的,以及幾個我用ajax調用解決的問題。我不知道該怎麼解決這個問題,並且對解決方案不滿意,但它確實奏效。

1

對我來說,刪除JSON中的尾部斜線並且這些其他建議不起作用。這是我做過什麼:

更改:

$(":text, textarea").result(findValueCallback).next().click(function() { 
      $(this).prev().search(); 
    }); 

要:

$("#suggest1").result(findValueCallback).next().click(function() { 
      $(this).prev().search(); 
    }); 

這個固定。 #suggest1是我的文本輸入的ID。