Действие формы с помощью javascript - программирование
Подтвердить что ты не робот

Действие формы с помощью javascript

У меня есть форма, которая должна выполнять функцию javascript для отправки, функция затем отправляет данные в мой почтовый файл php send и отправляется почта. Но он работает только в лисе. Действие формы, похоже, ничего не делает в IE, мой вопрос: правильно ли это вызов функции из внешнего файла из действия формы:

action="javascript:simpleCart.checkout()"

simpleCart - это .js файл, а checkout() - это функция.

Подсказки оценены, пытаясь понять, почему это будет работать в firefox, но не IE, хром или сафари.

<form name=form onsubmit="return validateFormOnSubmit(this)" enctype="multipart/form-data" action="javascript:simpleCart.checkout()" method="post">
4b9b3361

Ответ 1

Действие формы, установленное на функцию JavaScript, широко не поддерживается, я удивлен, что он работает в FireFox.

Лучше всего просто установить форму action на ваш PHP скрипт; если вам нужно что-либо сделать перед отправкой, вы можете просто добавить к onsubmit

Изменить оказалось, что вам не нужна дополнительная функция, просто небольшое изменение здесь:

function validateFormOnSubmit(theForm) {
    var reason = "";
    reason += validateName(theForm.name);
    reason += validatePhone(theForm.phone);
    reason += validateEmail(theForm.emaile);

    if (reason != "") {
        alert("Some fields need correction:\n" + reason);
    } else {
        simpleCart.checkout();
    }
    return false;
}

Затем в вашей форме:

<form action="#" onsubmit="return validateFormOnSubmit(this);">

Ответ 2

Я только что попробовал это в Firefox, Chrome, Edge и Safari, все они работают нормально:

<form action="javascript:alert('Hello there, I am being submitted');">
    <button type=submit>
        Let do it
    </button>
</form>

Таким образом, очевидно, что это вариант. Кроме того, я считаю это семантически подходящим, потому что он описывает, что происходит: вы отправляете форму, и вы не нужно, чтобы браузер переходил в другое место, но вместо этого вызывал вашу функцию.

Единственная причина не в том, что вы не можете передать свою форму простым этим ключевым словом в качестве параметра:

<form action="javascript:myFunction(this)">  <!-- doesn't work -->

Поэтому моя рекомендация:

<form action="javascript:;" onsubmit="myFunction(this)">

... который будет работать, как ожидалось. Он не представляет форму, ему не нужно "возвращать ложь" для предотвращения подачи, это не требует, чтобы вы имели дело с формой, используя JQuery domready, это именно то, на что это похоже. Нет автоматизации, нет волшебства, просто позвоните в myFunction и дайте ему сделать все остальное.

(И да, другие решения тоже работают, и с ними проблем нет. Я просто предпочитаю этот вариант.)

Ответ 3

Я всегда включаю файлы js в заголовке html-документа, а в действии просто вызываю функцию javascript. Что-то вроде этого:

action="javascript:checkout()"

Вы пытаетесь это сделать?

Не забудьте включить ссылку script в html head.

Я не знаю, почему это работает в firefox. С наилучшими пожеланиями.