jQuery的自动完成功能在IE
作品不工作精美,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;
}
});
编辑:我想通了......下面回答。
我觉得这是JSON列表中最后一项的最后一个逗号。看起来像FF不在乎,但IE做到了。
什么是错误信息?你有没有使用visual stuido/script debugger/ie8开发者工具来实际进入js并分析最大对象行&,看看它们是什么?
按如下所示添加调试器语句,在错误发生之前它将打入调试器。
formatMatch: function(row, i, max) {
debugger;
return row.name + " " + row.to;
},
出于某种原因,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 + ")";
}
我知道这是一个古老的职位,但我有同样的问题,并想补充我的“解决方案” - 虽然我觉得它不是一个好的解决方案。
我使用JQuery 1.4.2做一个Ajax请求得到一些XML在自动完成下拉列表显示,但我一直得到这个错误在IE:
“location.protocol”为空或不是对象
我在网上查看,有几个消息来源建议回到1.3.2,这是我做的,以及几个我用ajax调用解决的问题。我不知道该怎么解决这个问题,并且对解决方案不满意,但它确实奏效。
对我来说,删除JSON中的尾部斜线并且这些其他建议不起作用。这是我做过什么:
更改:
$(":text, textarea").result(findValueCallback).next().click(function() {
$(this).prev().search();
});
要:
$("#suggest1").result(findValueCallback).next().click(function() {
$(this).prev().search();
});
这个固定。 #suggest1
是我的文本输入的ID。
如果你知道了,我会将这个问题标记为答案,所以人们知道。 – localshred 2009-08-20 14:42:16
我不认为系统允许你将自己的问题标记为48小时 – leora 2009-08-20 18:56:55