通常情況下,如果我想在mootools的停止默認的事件中,我可以這樣做:在addEvent中使用命名函數時,如何停止默認事件?
$('form').addEvent('submit', function(e) {
e.stop();
//Do stuff here
});
不過,我不喜歡在事件中使用匿名函數,因爲我經常要重用的代碼。可以說我有一個驗證功能。我可以這樣做:
$('form').addEvent('submit', validate);
它工作正常,直到我想停止默認事件。驗證顯然不知道e是什麼,所以我不能只做e.stop()。另外我試過把事件作爲一個變量來驗證,但是每當我使用帶有參數的命名函數時,函數會在domready上自動調用,而不是在事件觸發時調用。更糟糕的是,事件被觸發時會引發錯誤。
我在做什麼錯?
更新:這裏是完整的驗證功能,以防萬一。但是,由於錯誤發生在第一行之後,所以在調用之後我會懷疑任何東西,所以它可能是不相關的。
var validate = function(e) {
e.stop();
if(this.get('tag') === 'form') {
this.getElements('input.text').each(validate);
}
else {
element = this;
div = element.getParent();
input = element.get('value');
filter = JSON.decode(div.get('filter'));
if(!filter.some(function(value, key) {
if(value === 'required') if(!setAndNotEmpty(element, input)) return true;
if(value === 'email') if(!isEmail(element, input)) return true;
if(value === 'date') if(!isDate(element, input)) return true;
if(value === 'time') if(!isTime(element, input)) return true;
if(key === 'chars') if(!charsLessThan(element, input, value)) return true;
if(key === 'words') if(!wordsLessThan(element, input, value)) return true;
return false;
})) setFault('', element);
}
}
你好,非常感謝你的回答。 不幸的是,我試過這個,它給了我以下錯誤: e.stop不是函數 – 2010-04-15 16:52:06
有趣....如果你聲明驗證爲var而不是函數,會發生什麼,例如'var validate =函數(e){...}'?我真的不能看到任何理由我的建議不起作用,並且真的希望看到你的驗證方法的聲明 - 這聽起來更像你意外地做錯了我們看不到的東西 – Graza 2010-04-15 16:58:16