Помощь с Prototype JS и привязкой событий - PullRequest
1 голос
/ 20 июля 2011

Я работаю над сайтом, который в основном имеет форму и содержит файл JS: http://assets.sprint.degreesearch.org/assets/defaults.js?1311179143

То, что я пытаюсь сделать, - это динамически добавлять дополнительную функцию при отправке формы (либо с помощью функции onclick на кнопке отправки, либо перезаписывая функции, включенные в JS, которые запускаются при отправке формы.

Проблема в том, что я не очень знаком с Prototype.js и не могу выполнить функцию при отправке формы. Когда он включен, он запускает триггеры, но, как мне кажется, он немедленно отменяется прототипом, и его выполнение останавливается на полпути.

Веб-сайт, о котором идет речь, это Step4 из http://sprint.degreesearch.org/collegefunnel веб-сайта, где на шаге 4, нажимая Submit, я хочу запустить функцию JS, которая в идеале занимает около 200-300ms

Любые указатели на то, как я могу отменить привязку события, связанного с нажатием мыши, и вставить свой динамический скрипт перед ним, а затем связать обратно все, что было связано по умолчанию

Спасибо Спарш Гупта

1 Ответ

1 голос
/ 20 июля 2011

Прототип имеет метод stopObserving для отмены привязки событий. В зависимости от того, где связаны события, вы можете вызвать stopObserving при отправке формы или события мыши других элементов.

Однако я не думаю, что это действительно проблема здесь. Когда вы говорите, что хотите запустить функцию JS, которая занимает 200-300 мс, я запутываюсь. Весь JavaScript является синхронным, поэтому время выполнения не имеет значения. Я подозреваю, что существует неустановленное требование, что рассматриваемая функция действительно является асинхронным вызовом, который может не возвращаться в течение этого периода времени.

В этом случае вы действительно хотите отменить отправку формы. Отправка формы может происходить одним из двух способов: либо это естественная отправка формы, либо она фактически вызывает какой-то асинхронный вызов.

Если это естественная отправка формы, вы можете привязать новый обработчик событий к действию отправки формы и вызвать event.preventDefault(), чтобы запретить браузеру отправлять сообщения на сервер. Позже позвоните по номеру .submit(), чтобы снова запустить его.

...