2009-02-05 59 views
0

是否存在來自JavaScript事件處理程序的跨瀏覽器方式以確定該事件是否被前一個處理程序取消了? IE和Chrome等其他瀏覽器都有可以測試的event.returnValue屬性,但FireFox似乎沒有任何此類屬性。用於確定DOM事件是否被取消的跨瀏覽器方式

下面是我正在談論的場景的一個示例。你有一個表單,像這樣:

<form id="test" name="test" onsubmit="return false;" /> 

你掛鉤的事件,它在JavaScript中,用的addEventListener /的attachEvent(聯播ommitted爲了簡潔)。該事件需要知道該鏈中的任何事情是否返回錯誤或以其他方式取消。 IE的版本,像這樣:

function onSubmitHandler(e) { 
    alert("event was cancelled prior to this handler: " + e.returnValue); 
} 

這個工作在IE,鉻等,但當然不能在Firefox,因爲它不具備event.returnValue。我已經通過其他方式對intarwebs進行了梳理,在FireFox中確定了這一點,並且什麼都沒有提出。有沒有解決這個問題,不涉及直接設置表單的onsubmit屬性?

回答

0

這是圍繞這個問題的方法。我希望有一個符合乾淨標準的方法,但似乎沒有。

function onSubmitHandler() 
{ 
    // only called if the other onsubmit handlers succeed 
} 

// hook in submit 
var originalOnSubmit = form.onsubmit; 

form.onsubmit = function(e) 
{ 
    var ret; 

    if (originalOnSubmit) 
     ret = originalOnSubmit(); 

    if (ret != false) 
    { 
     return onSubmitHandler(e); 
    } 
}; 
0

我的理解是,event.returnValue的主要用途是防止該事件的默認操作(即取消它)。例如,像上面這樣的處理程序:

function onSubmitHandler(e) { 
    e.returnValue = false; 
} 

上述IE中的代碼將阻止默認操作,阻止提交表單。在Firefox中的等效代碼,根據Gecko DOM Reference是:

e.preventDefault(); 

如果你想檢查是否一個事件已被取消,並在跨瀏覽器的方式做到這一點,就利用像jQuery庫是選項?使用jQuery將函數綁定到窗體的onsubmit事件,並讓該處理函數調用.preventDefault()將在所有支持的瀏覽器中完成同樣的事情。此外,您可以使用jQuery事件對象的.isDefaultPrevented()方法來確定事件是否已被取消,可能是通過lhs = e.returnValue完成了您正在嘗試的操作。

+0

我意識到需要做些什麼來取消一個事件,但這不是我在這裏要做的。在這裏使用jQuery不是一種選擇,因爲我正在編寫一個需要能夠與任何其他代碼集成的庫,例如ASP.NET驗證,而不僅僅是使用jQuery的東西。 – 2009-02-05 21:22:34

相關問題