2012-04-06 60 views
0

我有一些代碼讓我感到困惑。我在網上搜索過,我找不到這樣的東西,雖然我不認爲我是第一個=)我使用dojo,而且我不知道這與問題有什麼關係。有。問題是Firebug不會拋出我想拋出的錯誤。但是,在Safari中調試時發生錯誤?我一直都在做這類事情,出於某種原因,它不會在這裏工作。JavaScript不會拋出一個新的錯誤

下面是代碼示例:

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"); 

任何人有任何想法,爲什麼這不會在Firebug工作?

+1

如果它沒有被拋出,那麼[很可能]沒有達到。 – 2012-04-06 19:35:38

+1

'formSubmit'函數是否可以執行? – 2012-04-06 19:36:16

+1

是否定義了錯誤? – 2012-04-06 19:38:10

回答

5

可能錯誤被拋出,但拋出錯誤的功能是由一個事件處理程序,以便將錯誤的系統事件最終處理代碼的地方要麼抓到那裏(在你的代碼沒有被捕獲),只需調用或它被忽略。

當你說:「這不是拋出」你到底在期待看到?你有沒有一個try/catch的地方,你預計會發現異常?拋出一個異常沒有任何它自己的通用UI。它引發異常,然後取決於一些更高級別的代碼來捕獲異常並對其進行處理。如果在該事件循環中沒有更高級別的代碼來捕捉異常,則它會中止該事件處理程序的執行。

+0

我明白你的意思了。我遺漏的一條大信息是代碼被停止。它只是沒有在螢火蟲中顯示錯誤。我認爲你所說的一定會發生,但仍然不明白爲什麼在Safari中顯示錯誤?那麼如何讓這種類型的錯誤顯示在螢火蟲中呢?它在我的代碼的其他部分工作,當我使用jQuery時,我從未遇到過這個問題(並不是說我不喜歡使用dojo,因爲我非常喜歡這個框架)。如果我使用try/catch,這是否是一種更好的方式來持續顯示錯誤? – mike 2012-04-06 23:17:00

+0

你想要什麼行爲?你想向用戶顯示一條錯誤信息嗎?拋出不是爲了向用戶顯示錯誤。如果是這樣,不要使用'throw',使用'alert'。每個瀏覽器都可以配置如何處理未捕獲的異常 - 這是最終用戶設置,不是您應該在代碼中使用或依賴的東西。如果拋出一個異常,並希望除了停止執行該JS線程的執行之外的其他任何東西,則應該將其捕獲到其他地方。如果你想向用戶顯示一條消息,不要使用'throw'。使用類似'alert(msg)'的東西。 – jfriend00 2012-04-06 23:36:35