Обычно, если я хочу остановить событие по умолчанию в mootools, я могу сделать это:
$('form').addEvent('submit', function(e) {
e.stop();
//Do stuff here
});
Однако мне не нравится использовать анонимную функцию в событиях, потому что я часто хочу повторно использовать код. Допустим, у меня есть функция проверки. Я мог бы сделать это:
$('form').addEvent('submit', validate);
, который работает нормально, пока я не хочу остановить событие по умолчанию. validate, очевидно, не знает, что такое e, поэтому я не могу просто сделать e.stop (). Также я попытался передать событие в качестве переменной для проверки, но всякий раз, когда я использую именованную функцию с параметрами, функция вызывается автоматически при готовности, а не при срабатывании события. Хуже того, при возникновении события выдается ошибка.
Что я делаю не так?
ОБНОВЛЕНИЕ: Здесь представлена функция проверки в полном объеме, на всякий случай. Однако, поскольку ошибка возникает после первой строки, я сомневаюсь, что что-либо после вызывается, так что это, вероятно, не имеет значения.
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);
}
}