2010-02-25 66 views
2

我試圖從使用內聯事件觸發器遷移到使用Prototype的Event.observe函數使用事件偵聽器。有一些內聯命令,我不知道如何使用函數調用來處理。使用原型Event.observe返回函數

我想移動從:

<form id='formFoo' action='whatever.php' onsubmit="return Foo.verify(this);"> 

要將事件電話:

Event.observe('formFoo', 'submit', Foo.verify); 

這當然是行不通的,因爲我需要從函數返回值我打電話,以確定是否表單被提交或不提交。

我該如何使用事件處理程序執行此操作?

回答

3

最簡單的方法可能是從原型開始做Event.Stop。這適用於我(把這個在任何腳本塊):

Foo = { verify: function(){ return false } }; 

Event.observe(window, 'load', function() { 
    Event.observe('formFoo', 'submit', function(e){ 
     if(! Foo.verify($('formFoo'))){ 
      e.stop(); 
     } 
    }); 
}); 

它停止每個表單提交;你只需要改變Foo.verify來做你想做的事。

說明:當觸發事件提交,原型經過處理程序表示該事件的原型Event對象,並且該對象上的stop方法防止提交。其餘的只是設置事件。

小記:除其他事項外,通過Foo.verify直接作爲處理會造成驗證被稱爲一個功能,而不是一個方法(將在調用中的全局對象,而比Foo)。這種情況可能會好起來 - 如果驗證不使用這個,你沒事。不過,請注意不同之處。

+0

不幸的是,這仍然允許在返回驗證函數的結果之前提交表單。這對一個按鈕(使用點擊事件)正常工作,但這是一個搜索表單,並且只有一個輸入,所以如果用戶點擊「Enter」,表單被提交 – mwieczorek 2010-02-25 05:41:42

+0

您在輸入我的回覆時更新了答案......以上的作品完美。感謝您的解釋。 – mwieczorek 2010-02-25 05:47:55

+0

點擊小複選框,如果你喜歡它:) – 2010-02-25 05:58:46