2010-03-19 28 views
0

我們正在編寫一個ASP.NET MVC應用程序。默認情況下,如果客戶端瀏覽器具有Javascript,那麼通過Javascript將頁面上每個表單的處理程序設置爲按照Ajax「管道」(漸進式增強)發送提交的處理程序。繞過Javascript表單處理程序

但是,對於一種形式(在幾個頁面上),我想這個處理程序被繞過/忽略。有沒有簡單的方法來做到這一點?也許通過直接在DOM中指定我自己的onsubmit事件來重寫處理程序 - 或者其他方法?

我們使用jQuery,所以這些庫可供我使用。

回答

1

我很可能通過爲符合您的標準的應用程序(不應該有AJAX行爲的應用程序)分配一些獨特的屬性來解決這個問題 - 例如class="oldschool"。在JavaScript代碼,掛接在表單上的提交事件處理程序,那麼我會確保排除任何形式有特殊的標誌:

$('form:not(.oldschool)').submit(function() { 
    // Do fancy AJAX stuff 
}); 

更新:爲了改變任何外部JavaScript文件,並有通過改變HTML標記簡單介紹了新的行爲,可考慮做這樣的事情:

<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');"> 

這是毫無美感,但它似乎完成工作 - 在我現有的瀏覽器都至少這裏。

+0

好主意。我更喜歡一種中和DOM表單處理程序的方式,因爲我沒有對「花哨的」ajax Javascript代碼的智力「擁有權」,但是,我會考慮將您的方法作爲備用位置。 – Ben 2010-03-19 08:02:31

+0

@Ben:在你不擁有的腳本之後,如何從腳本中的窗體中註銷事件處理程序?這可能嗎? – 2010-03-19 08:13:02

+0

@Ben:如果我上次評論中提出的解決方案也是不行的話,請參閱我更新後的答案中的古怪的哈克解決方案:) – 2010-03-19 08:25:05

1

儘管我不確定我是否理解「從DOM」中的含義,但我認爲您無法更改原始ajax/js代碼,但應該可以在某處插入一些script標記,設置ajax提交處理程序的代碼。

進一步假設該處理器集的形式$("form").submit(...)或類似的,你可以使用這個

$('selectorForYourForm').unbind('submit'); 

由於原來這個js代碼運行後,將解除綁定任何處理的原始代碼的提交操作設置這種形式。