Обход обработчика формы Javascript
-
21-09-2019 - |
Вопрос
Мы пишем приложение ASP.NET MVC.По умолчанию, если в клиентском браузере есть Javascript, обработчик каждой формы на странице устанавливается Javascript так, чтобы отправлять отправку по «каналу» Ajax (прогрессивное улучшение).
Но для одной формы (на странице из нескольких) я бы хотел, чтобы этот обработчик обходил/игнорировался.Есть ли простой способ сделать это?Возможно, переопределив обработчик, указав собственное событие onsubmit непосредственно в DOM - или какой-то другой метод?
Мы используем jQuery, поэтому эти библиотеки мне доступны.
Решение
Я бы, скорее всего, решил эту проблему, присвоив форме какой-то отличительный атрибут, который противоречит вашим стандартам (той, которая не должна иметь поведение AJAX) - что-то вроде class="oldschool"
.В коде JavaScript при подключении обработчика событий отправки к формам я бы обязательно исключил все формы с этой специальной отметкой:
$('form:not(.oldschool)').submit(function() {
// Do fancy AJAX stuff
});
Обновлять: Чтобы нет Чтобы изменить любые внешние файлы JavaScript и ввести новое поведение, просто изменив разметку HTML, рассмотрите возможность сделать что-то вроде этого:
<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">
В этом нет красоты, но, похоже, он выполняет свою работу - по крайней мере, в доступных мне здесь браузерах.
Другие советы
Хотя я не уверен, что понимаю, что вы подразумеваете под «из DOM», я предполагаю, что вы не можете изменить исходный код ajax/js, но вы сможете вставить немного script
где-то тег, который запускается после кода, устанавливающего обработчик отправки ajax.
Далее предполагая, что набор обработчиков имеет вид $("form").submit(...)
или что-то подобное, вы можете использовать это
$('selectorForYourForm').unbind('submit');
Поскольку это выполняется после исходного кода js, это отменяет привязку любого обработчика к исходному коду, установленному для действия отправки этой формы.