Возврат функций с использованием прототипа Event.observe - PullRequest
2 голосов
/ 25 февраля 2010

Я пытаюсь перейти от использования встроенных триггеров событий к использованию прослушивателей событий с помощью функции Event.observe в Prototype. Есть несколько встроенных команд, которые я не знаю, как обрабатывать с помощью вызова функции.

Я хочу перейти от:

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

Для вызова события:

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

Это, конечно, не будет работать, так как мне нужно возвращаемое значение из функции, которую я вызываю, чтобы определить, будет ли форма отправлена ​​или нет.

Как мне это сделать с помощью обработчиков событий?

1 Ответ

3 голосов
/ 25 февраля 2010

Самый простой способ сделать это, вероятно, 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, чтобы делать то, что вы хотели.

Объяснение: Когда инициируется событие submit, prototype передает обработчику прототип Event объекта, представляющего событие, а метод stop для этого объекта предотвращает отправку. Остальное просто настраивает событие.

Небольшое примечание: Помимо прочего, передача Foo.verify непосредственно в качестве обработчика приведет к вызову verify как функции, а не метода ( this будет глобальным объектом в вызове, а не Foo). Эта ситуация может быть в порядке - если проверить не использует это , все в порядке. Однако помните о разнице.

...