Обход обработчика формы Javascript - PullRequest
0 голосов
/ 19 марта 2010

Мы пишем приложение ASP.NET MVC. По умолчанию, если в клиентском браузере есть Javascript, Javascript устанавливает обработчик для каждой формы на странице как отправляющий отправку по «трубе» Ajax (прогрессивное улучшение).

Но для одной формы (на странице из нескольких) я бы хотел, чтобы этот обработчик был обойден / проигнорирован. Есть ли простой способ сделать это? Возможно, переопределив обработчик, указав мое собственное событие onsubmit непосредственно в DOM - или каким-либо другим методом?

Мы используем jQuery, поэтому мне доступны эти библиотеки.

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Хотя я не уверен, что понимаю, что вы подразумеваете под "из DOM", я предполагаю, что вы не можете изменить исходный код ajax / js, но вы должны быть в состоянии вставить небольшой тег script где-нибудь, который запускается послекод, который устанавливает обработчик отправки ajax.

Далее, предполагая, что набор обработчиков имеет вид $("form").submit(...) или аналогичный, вы можете использовать этот

$('selectorForYourForm').unbind('submit');

, так как он выполняется после исходного jsзакодируйте, чтобы любой обработчик связал исходный код, заданный для действия отправки этой формы.

1 голос
/ 19 марта 2010

Скорее всего, я бы решил эту проблему, назначив какой-то отличительный атрибут форме, которая не соответствует вашим стандартам (та, которая не должна иметь поведения AJAX) - что-то вроде class="oldschool". В коде JavaScript, подключая обработчик события submit к формам, я бы затем исключил любые формы с этим специальным знаком:

$('form:not(.oldschool)').submit(function() {
    // Do fancy AJAX stuff
});

Обновление: Чтобы не изменил какие-либо внешние файлы JavaScript и ввел новое поведение, просто изменив разметку HTML, подумайте над тем, чтобы сделать что-то вроде этого:

<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">

Это не красота, но, похоже, работа выполнена - по крайней мере, в браузерах, которые у меня есть здесь.

...