На моей странице есть форма, которая выглядит так:
<form action="/home/email" enctype="multipart/form-data" id="email-form" method="post">
// form elements
</form>
В зависимости от страницы, я хотел бы динамически изменять атрибуты формы с помощью jQuery; в частности, атрибут действия.
$('#send-email').click(function () {
$('#email-form').attr('action', '@Url.Action("emailaccounting", "home")')
)};
Приведенный выше jQuery успешно отображает:
<form action="/home/emailaccounting" enctype="multipart/form-data" id="email-form" method="post">
// form elements
</form>
Таким образом, я могу изменять атрибуты формы при нажатии на ссылку, которая открывает всплывающую форму для отправки электронного письма. Однако, когда я отправляю форму, действие, которое получает удар, является оригинальным - «электронная почта», а не «emailaccounting».
Я немного поиграл, и в обработчике кликов для формы электронной почты я добавил следующее:
$('.send-email').click(function (e) {
// The original form action post will be hit without this...
e.preventDefault();
$('#email-form').submit();
};
С помощью приведенного выше фрагмента вызывается правильное действие - «emailaccounting». Зачем? Я не знаю ... Я надеюсь, что кто-то может это объяснить. Но я еще не в лесу - у меня есть элемент ввода для загрузки файла. Теперь, когда я пытаюсь загрузить файл в той же форме, которая работала ранее, я нажимаю «Отправить», и он переходит к действию «электронная почта». Если я не пытаюсь загрузить файл, выполняется действие «emailaccounting».
- Почему e.preventDefault (), сопровождаемый отправкой формы, соответствует правильному действию?
- Почему загрузка файла направляет его в исходное действие формы; не тот, измененный JQuery?
Спасибо!