在firefox和chrome中运行得很漂亮,但也就是说错误:
“名称为空或不是对象”
我在下面以粗体显示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;
}
});
编辑:我想通了......在下面回答。
答案 0 :(得分:5)
我认为它是JSON列表中最后一项末尾的额外逗号。看起来像FF并不关心,但IE确实如此。
答案 1 :(得分:1)
对我来说,删除JSON中的尾部斜杠,这些其他建议不起作用。这就是我所做的:
更改:
$(":text, textarea").result(findValueCallback).next().click(function() {
$(this).prev().search();
});
要:
$("#suggest1").result(findValueCallback).next().click(function() {
$(this).prev().search();
});
这解决了它。 #suggest1
是我的文字输入的ID。
答案 2 :(得分:0)
错误讯息是什么? Hhave你使用visual stuido / script debugger / ie8开发人员工具来实际进入js并分析行&最大对象看看它们是什么?
按如下所示添加调试器语句,它将在错误发生之前进入调试器。
formatMatch: function(row, i, max) {
debugger;
return row.name + " " + row.to;
},
答案 3 :(得分:0)
由于某种原因,IE在页面加载时调用formatItem函数。如果为formatMatch和formatResult提供自定义函数,则会发生同样的情况。问题是,当IE调用这些函数时,它不提供任何参数并导致错误。
我通过修改插件脚本本身来修复此问题,方法是在尝试使用之前添加测试以确定是否存在值。我从
修改了默认的formatItem函数formatItem:function(row){return row[0];}
到
formatItem:function(row){if (row) return row[0]; else return "";}
并修改了populate()函数,我改变了
if(value===false)continue;
到
if(!value || value===false)continue;
另外,如果您为formatItem,formatMatch或formatResult提供自己的自定义函数,请务必测试row参数是否存在,例如:
formatItem: function( row, i, max ) {
if (row)
return row.name + " (" + row.id + ")";
}
答案 4 :(得分:0)
我知道这是一个老帖子,但我遇到了同样的问题,并且喜欢添加我的“解决方案” - 虽然我觉得它不是一个好的。
我正在使用JQuery 1.4.2执行ajax请求以获取一些xml以显示在自动完成下拉列表中,但我在IE中不断收到此错误:
'location.protocol'为null或不是对象
我在网上看了几个消息来源建议回到1.3.2,我做了,并且我在ajax调用时遇到了几个问题。我不知道该怎么做这个问题,并且对解决方案感到不满意,但确实有效。