2012-04-06 13 views
0

Ich habe einen Code, der mich nur verwirrt hat. Ich habe online gesucht, und ich kann so etwas nicht finden, obwohl ich nicht denke, dass ich der erste bin =) Ich benutze Dojo, und ich habe keine Ahnung, ob das etwas mit dem Problem zu tun hat habe ich. Das Problem ist, dass Firebug keinen Fehler wirft, den ich gerne werfen würde. Beim Debuggen in Safari wird der Fehler jedoch angezeigt ??? Ich mache das die ganze Zeit und aus irgendeinem Grund wird es hier nicht funktionieren. HierJavascript wird nicht einen neuen Fehler werfen

ist das Codebeispiel:

var formSubmit = function(e) { 
    e.preventDefault(); 

    var f = testForm.domNode, 
     map = {}; 
    for(var i = 0; i < f.elements.length; i++){ 
     var elem = f.elements[i]; 
     map[elem.id] = elem.value; 
    } 


    if (!map.id && !map.field1) { 
     ***// -- this error will not be thrown --*** 
     throw new Error("you must supply some data"); 
    } 
} 



testForm = new Form({ 
    encType: "multipart/form-data", 
    method: "post", 
    onSubmit: formSubmit 
}, "testForm"); 

Wer irgendwelche Ideen, warum dies würde in Firebug nicht funktionieren?

+1

Wenn es nicht geworfen wird, ist es [mehr als wahrscheinlich] nicht erreicht. –

+1

Wird die 'formSubmit'-Funktion überhaupt ausgeführt? –

+1

Ist "Fehler" definiert? –

Antwort

5

Der Fehler wird wahrscheinlich ausgelöst, aber die Funktion, die den Fehler auslöst, wird von einem Ereignishandler aufgerufen, sodass der Fehler im Systemereignisbearbeitungscode endet, wo er entweder gefangen wird (nicht in Ihrem Code gefangen) oder einfach wird ignoriert.

Wenn Sie sagen, "es ist nicht geworfen", was haben Sie erwartet zu sehen? Hatten Sie irgendwo eine try/catch, von der Sie erwartet hatten, die Ausnahme zu bekommen? Das Auslösen einer Ausnahme hat keine eigene generische Benutzeroberfläche. Es löst die Ausnahme aus, und dann liegt es an Code auf höherer Ebene, um die Ausnahme abzufangen und etwas damit zu tun. Wenn in dieser Ereignisschleife keine höhere Codeebene vorhanden ist, um die Ausnahme abzufangen, bricht sie nur die Ausführung dieser Ereignisbehandlungsroutine ab.

+0

Ich sehe was du sagst. Eine große Information, die ich weggelassen habe, ist, dass der Code gestoppt wird. Es zeigt nur nicht den Fehler in Firebug. Ich denke, was Sie sagen, muss passieren, aber immer noch nicht verstehen, warum der Fehler in Safari angezeigt wird? Also, wie würde ich diese Art von Fehler in Firebug anzeigen? Es funktioniert in anderen Teilen meines Codes, und als ich jQuery benutzt habe, bin ich nie auf dieses Problem gestoßen (um nicht zu sagen, dass ich Dojo nicht mag, weil ich dieses Framework wirklich mag). Wenn ich einen Versuch/Fang verwende, wäre das ein besserer Weg, um den Fehler konsistent anzuzeigen? – mike

+0

Was soll das Verhalten sein? Möchten Sie dem Benutzer eine Fehlermeldung anzeigen? throw ist NICHT zur Anzeige von Fehlern für den Benutzer. Wenn ja, benutze 'throw' nicht, benutze' alert'. Jeder Browser kann so konfiguriert werden, dass er mit nicht abgefangenen Ausnahmen umgehen kann - es handelt sich um eine Endbenutzereinstellung, die Sie in Ihrem Code nicht verwenden oder verwenden sollten. Wenn Sie eine Ausnahme auslösen und etwas anderes wünschen als nur die Ausführung dieses JS-Ausführungs-Threads anzuhalten, sollten Sie es woanders abfangen. Wenn Sie dem Benutzer eine Nachricht zeigen möchten, verwenden Sie nicht "throw". Verwenden Sie so etwas wie 'alert (msg)'. – jfriend00

Verwandte Themen