2009-08-20 13 views
2

funktioniert wunderbar in Firefox und Chrome, aber das heißt einen Fehler geben:jquery die automatische Vervollständigung funktioniert nicht in dh

"name ist null oder kein Objekt"

i die Zeile geschrieben haben, die in IE versagt fett gedruckt unten.

$("#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; 
    } 
}); 

EDIT: Ich fand es heraus ... antwortete unten.

Antwort

5

Ich fand heraus, es war ein zusätzliches Komma am Ende des letzten Elements in der Liste in der JSON. Sieht so aus als wäre FF egal, aber IE hat es getan.

+0

Wenn Sie es herausgefunden haben, würde ich diese Frage als beantwortet markieren, damit die Leute wissen. – localshred

+1

Ich denke nicht, dass das System Ihnen erlaubt, Ihre eigene Frage als beantwortet für ungefähr 48 Stunden zu markieren – leora

0

Was ist die Fehlermeldung? Hast du visuelle stuido/script Debugger/ie8 Entwickler-Tools verwendet, um tatsächlich in die js einzusteigen und die Zeile & max Objekte zu analysieren, um zu sehen, was sie sind?

Fügen Sie wie folgt eine Debugger-Anweisung hinzu, die in den Debugger einbricht, bevor der Fehler auftritt.

0

Aus irgendeinem Grund ruft IE die Funktion FormatItem beim Laden der Seite auf. Das Gleiche passiert mit formatMatch und formatResult, wenn Sie benutzerdefinierte Funktionen für sie bereitstellen. Das Problem ist, dass wenn IE diese Funktionen aufruft, keine Parameter zur Verfügung stehen und das den Fehler verursacht.

Ich habe dies behoben, indem ich das Plugin-Skript selbst modifiziert habe, indem ich Tests für die Existenz des Wertes hinzugefügt habe, bevor ich versuche, es zu benutzen. Ich veränderte die Standard FORMAT Funktion von

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

zu

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

und das Bestücken() Funktion zu modifizieren, änderte ich

if(value===false)continue; 

zu

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

Auch wenn Sie stellen Sie Ihr eigenes c ustom Funktionen für FORMAT, formatMatch oder formatResult, sicher sein, die Existenz des Zeilenparameter zu testen, zum Beispiel:

formatItem: function(row, i, max) { 

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

Ich weiß, dass dies eine alte Post, aber ich hatte gerade das gleiche Problem und möchte hinzufügen meine "Lösung" - obwohl ich nicht denke, dass es eine gute ist.

Ich war mit JQuery 1.4.2 eine Ajax-Anforderung zu tun, einige XML zu erhalten in der Autocomplete-Drop-Down zu zeigen, aber ich hielt diesen Fehler in IE bekommen:

‚location.protocol‘ null ist oder nicht Objekt

Ich schaute online und mehrere Quellen empfohlen, zurück zu 1.3.2, was ich tat, und mehrere Probleme, die ich mit Ajax Anrufe aufgeklärt hatte. Ich bin mir nicht sicher, was ich von diesem Problem halten soll und bin nicht zufrieden mit der Lösung, aber es hat funktioniert.

1

für mich, entfernen Sie den Schrägstrich in der JSON und diese anderen Vorschläge haben nicht funktioniert.Das ist, was ich tat:

Geändert:

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

An:

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

Dieses es fixiert. #suggest1 ist die ID meiner Texteingabe.

Verwandte Themen