2009-08-20 98 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。