Вопрос

Мы пишем приложение 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, это отменяет привязку любого обработчика к исходному коду, установленному для действия отправки этой формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top