jquery自动完成不工作ie

时间:2009-08-20 14:22:38

标签: jquery internet-explorer autocomplete

在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;  
    }
});

编辑:我想通了......在下面回答。

5 个答案:

答案 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调用时遇到了几个问题。我不知道该怎么做这个问题,并且对解决方案感到不满意,但确实有效。