這個問題是爲了開發jQuery插件和其他自包含的JavaScript代碼片段,不需要修改其他腳本文件的兼容性。在調用event.preventDefault()之後是否有[通用]方法來調用默認操作?
我們都知道event.preventDefault()會阻止默認事件,所以我們可以運行一個自定義函數。但是如果我們想在調用它之前簡單地將延遲默認事件呢?我已經看到了各種各樣的特定於案例的忍者技巧和解決方法來重新調用默認動作,但就像我所說的,我的興趣在於以通用的方式重新觸發默認動作,而不是處理基於案例的默認觸發器,以個案爲基礎。
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
e.invokeDefault(); // Imaginary... :(
});
即使像表單提交這樣簡單的事情,似乎沒有普遍的答案。 $(selector).closest("form").submit()
解決方法假定默認操作是標準表單提交,並不像ASP.NET中的__doPostBack()
函數那樣古怪。要調用ASP.NET回調的結束,這是我來的通用,設置它和忘記它的解決方案最接近:
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
var javascriptCommand = e.currentTarget.attributes.href.nodeValue;
evalLinkJs(javascriptCommand);
});
function evalLinkJs(link) {
// Eat it, Crockford. :)
eval(link.replace(/^javascript:/g, ""));
}
我想我可以開始編寫特殊情況處理與一個window.location
重定向的正常鏈接,但隨後我們打開了一個全新的蠕蟲罐 - 在越來越多的情況下爲缺省事件調用堆積創建比解決方案更多的問題。
那麼怎麼樣?誰有我一直在尋找的魔力子彈?
我真的不明白你想做什麼......不活動處理程序代碼在默認動作發生之前運行*(例如,submit事件處理程序的代碼將在表單實際提交之前運行......是不是您要實現的目標?) –
您的自定義代碼是異步的嗎?這也許可以解釋爲什麼你覺得你需要這樣一種方法,但即使有這種想象的方法也不能解決你的問題。 – agradl
你一定需要更清楚你想要什麼。如果您想在處理程序中運行代碼,那麼該代碼無論如何都會在「默認」行爲之前運行。 –