2013-06-02 19 views
1

在HTML:防止基於提交全局誤差在jQuery的

在Javascript
<form action="next.html"> 
    <!-- tags here --> 
    <button id="prev">Prev</button> 
    <button id="next">Next</button> 
</form> 

$("form").submit (function(e) { 
    e.preventDefault(); 
    if (e.originalEvent.explicitOriginalTarget.id == "next") { 
     doPostData(); 
     // window.location = "next.html"; 
    } 
    else if (e.originalEvent.explicitOriginalTarget.id == "prev") { 
     window.location = "prev.html"; 
    } 
} 

我已經附上全球的ErrorHandler以$(document).ajaxError它解析代碼的基礎上,例如here

doPostData()基本上向服務器發送POST請求。當這是成功的時候,一切都很好,但是當我遇到錯誤時,我不知道如何阻止表單提交。錯誤閃爍並且瀏覽器重定向到「下一頁」頁面。

我該如何優雅地解決這個問題?

+0

您是否嘗試過在提交之前在開發者控制檯中是否顯示錯誤? – Bemmu

+0

當我用Firebug代碼遍歷時,我可以看到來自服務器的「錯誤請求」響應(這是正確的)。 – hepabolu

+0

更新:不知道之前和現在之間有什麼不同,但現在我至少得到錯誤處理程序開火,我留在同一頁面。剩下的是:我怎麼才能弄清楚錯誤處理程序是否被解僱,這樣我就可以採取適當的行動。 – hepabolu

回答

0

只是爲了子孫後代,我終於想通了,什麼是錯的:

錯誤處理程序正確地解僱,但重定向到下一個頁面還是發生了,因爲還是會有window.location = "next.html"可用。類似於刪除上面代碼中window.location行的註釋。

所以基本的設置,考慮到上面的代碼只適用於Firefox(無法在Chrome或Safari):

$(document).ajaxError(genericAjaxErrorHandler); 

$("#prev").click(function() { 
    window.location = "prev.html"; 
}); 

$("#next").click(function() { 
    doPostData(); 
}); 

function doPostData() { 
    // actions here 

    if (allIsOk) { 
     window.location = 'next.html'; 
    } 
} 

我加了一個

$('form').submit(function(e) { 
    e.preventDefault(); 
}); 

可以肯定的,但它可能沒有必要。