Uncaught TypeError: Cannot call method 'substr' undefined (Chrome/IE)
So einfach Debuggen jemand anderes den code, ich würde alles behoben in Firefox und jetzt auf Chrome, aber wenn ich versucht bin, um eine option zu wählen, die wählt alle untergeordneten Knoten und öffnet Ihre relevanten Graphen, erhalte ich eine seltsame Fehlermeldung:
Uncaught TypeError: Cannot call method 'substr' undefined
Ich weiß, das problem ist (anscheinend) diese Zeile:
var graph={id:seqId,entityName:flags[6].substr(1).substr(0,flags[6].length-2),entity:flags[5].substr(1).substr(0,flags[5].length-2),idCounter:flags[4],counterName:flags[3].substr(1).substr(0,flags[3].length-2),ivmanager:flags[7].substr(1).substr(0,flags[7].length-2),chart:null,pointsToShowX:null,borneInf:null,unite:"",idInstance:flagsInstance[2].substr(1).substr(0,flagsInstance[2].length-2),instanceName:flagsInstance[3].substr(1).substr(0,flagsInstance[3].length-2),listPdsNull:new Array(), countInstance:idTreeview+"_"+i, countGraph:-1};
Aber ich habe keine Ahnung, warum das zu einem Fehler führt, da sieht alles korrekt zu mir?! substr verwendet wird unzählige Male vor und nach der Funktion, also habe ich keine Ahnung, warum Chrome wirft dieser Fehler bei mir.
Den volle Funktion ist als unten. Ich glaube das problem liegt im zweiten Teil.
function loadGraphs(idTreeview,idSelectGraph)
{
var count=0;
var fn=$('#'+idSelectGraph)[0].attributes[1].value;
fn=fn.substr(12).substr(0,fn.length-2);
var flags=fn.split(new RegExp(","));
var data='';
var idInstanceTreeview = idTreeview;
if($('#counterTreeviewUL'+idInstanceTreeview).length == 0)
{
var fnInstance=$('#'+idSelectGraph)[0].attributes[1].value;
var flagsInstance=fnInstance.split(new RegExp(","));
var graph = {
id: seqId,
entityName: flags[6].substr(1).substr(0, flags[6].length - 2),
entity: flags[5].substr(1).substr(0, flags[5].length - 2),
idCounter: flags[4],
counterName: flags[3].substr(1).substr(0, flags[3].length - 2),
ivmanager: flags[7].substr(1).substr(0, flags[7].length - 2),
chart: null,
pointsToShowX: null,
borneInf: null,
unite: "",
idInstance: flagsInstance[2].substr(1).substr(0, flagsInstance[2].length - 2),
instanceName: flagsInstance[3].substr(1).substr(0, flagsInstance[3].length - 2),
listPdsNull: new Array(),
countInstance: idTreeview + "_" + i,
countGraph: -1
};
seqId++;
graphs[graphsLastId]=graph;
graphsLastId++;
}
else
{
for(var i=0;i<$('#counterTreeviewUL'+idInstanceTreeview)[0].children.length;i++)
($('#counterTreeviewUL'+idInstanceTreeview)[0].children[i].children[0].checked)?++count:count;
if ($('#counterTreeviewUL'+idInstanceTreeview)[0].children.length == count)
{
$('#'+idSelectGraph)[0].checked=true;
$('#'+idSelectGraph)[0].indeterminate=false;
}
else if (count==0)
{
$('#'+idSelectGraph)[0].checked=true;
$('#'+idSelectGraph)[0].indeterminate=false;
}
else
{
$('#'+idSelectGraph)[0].checked=true;
$('#'+idSelectGraph)[0].indeterminate=false;
}
for (var i=0;i<$('#counterTreeviewUL'+idTreeview)[0].children.length;i++)
{
if (!$('#counterTreeviewUL'+idTreeview)[0].children[i].children[0].checked)
{
$('#counterTreeviewUL'+idTreeview)[0].children[i].children[0].checked=true;
var fnInstance=$('#counterTreeviewUL'+idTreeview)[0].children[i].children[0].attributes[1].value;
fnInstance=fnInstance.substr(15).substr(0,fnInstance.length-2);
var flagsInstance=fnInstance.split(new RegExp(","));
var graph = {
id: seqId,
entityName: flags[6].substr(1).substr(0, flags[6].length - 2),
entity: flags[5].substr(1).substr(0, flags[5].length - 2),
idCounter: flags[4],
counterName: flags[3].substr(1).substr(0, flags[3].length - 2),
ivmanager: flags[7].substr(1).substr(0, flags[7].length - 2),
chart: null,
pointsToShowX: null,
borneInf: null,
unite: "",
idInstance: flagsInstance[2].substr(1).substr(0, flagsInstance[2].length - 2),
instanceName: flagsInstance[3].substr(1).substr(0, flagsInstance[3].length - 2),
listPdsNull: new Array(),
countInstance: idTreeview + "_" + i,
countGraph: -1
};
seqId++;
graphs[graphsLastId]=graph;
graphsLastId++;
}
}
}
graphsToLoad=false;
updateAllGraphs();
loading=false;
if($('#counterTreeviewUL'+idInstanceTreeview).length == 0)
{
if($('#'+idSelectGraph)[0].checked)
{
countSelectedGraphs(graphsLastId, flags[5].substr(1).substr(0,flags[5].length-2), 0);
}
else
{
countSelectedGraphs(graphsLastId, flags[5].substr(1).substr(0,flags[5].length-2), 0);
}
}
else
{
countSelectedGraphs(graphsLastId, flags[5].substr(1).substr(0,flags[5].length-2), 0);
}
}
Jede Einsicht in das, was verursacht diese scheinbar zufällige Fehler wäre sehr geschätzt, da kann ich Sie nicht finden viel online über diese Fehler (die Fälle, die ich gesehen habe, sind nichts, wie meiner einer), danke!
- Was ist der Wert von
fn
nach dem ersten Auftrag? - Es war gleich fn = selectGraph95 wenn ich Konsole.angemeldet nach var fn=$ statement-und es war gleich fn = 5, wenn ich Konsole.angemeldet nach dem fn=fn.substr Anweisung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Linie
beginnt damit, dass ein substring, effektiv Strippen die ersten 12 Buchstaben entfernt aus dem string und verlassen Sie mit "5". (Die zweite
substr
tut effektiv nichts in diesem Fall)Weil fn ist "5", wenn Sie zuweisen
flags
dannflags
ist auch "5", das ist ein 1-Zeichen-string, und daherflags[6] == undefined
(oder einem index größer als 0 ist). Versuchen Sie einfach diese 3 Zeilen in der Konsole:$('#'+idSelectGraph)[0].attributes[1].value
seit es will, um es zu teilen auf','
in ein String-array zu verwenden, als "flags" für die Grafik-Funktionconsole.log($('#'+idSelectGraph));
direkt am Anfang der Funktion?$('#'+idSelectGraph)[0].attributes[1].value
nur wählt das Attribut id, das element. Ich möchte sprechen zu dem "jemand anderes", schrieb dieser. 🙂Hier ist Ihre lesbare code:
Du müssen, um sicherzustellen, dass jedes mal, wenn Sie rufen
substr
, die "string", Sie nennen es auf vorhanden ist.