Сделать гиперссылку кнопкой отправки формы - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь заставить элемент гиперссылки действовать как кнопка отправки формы.На этот вопрос отвечали несколько раз в течение многих лет, но по какой-то причине я не могу заставить его работать даже с вырезанным насквозь кодом, и мне интересно, если я упускаю что-то тривиально простое, что мойглаза слишком выпучены, чтобы видеть.Полный код здесь:

<html>
<head>
<script language="JavaScript" type="text/javascript">
<!--
function signup() {
    alert("Form is " + document.signup_form);
    document.signup_form.submit() ;
}
-->
</script>
</head>

<body>

  <?php
    echo("Submit is [" . $_POST['submit'] . "]");
  ?>

  <form method="post" name="signup_form" id="signup_form" action="" >
    <input type="text" name="from_email" placeholder="e-mail address"><br>
    <input type="submit" name="submit" value="Send Email"> 
    <a href="javascript:signup()">Sign Up!</a><br>
  </form>

</body>
</html>

Элемент отправки ввода («Отправить письмо») работает нормально.Гиперссылка («Зарегистрироваться!») Также работает нормально и вызывает функцию javascript, так что в функции появляется поле alert ().

Итак, просто вызов submit() ничего не делает.-Я даже распечатал document.signup_form в поле alert(), чтобы подтвердить, что оно определено (оно есть).Так чего мне здесь не хватает?

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Есть странная вещь с тем, как формы работают с Javascript - каждое поле доступно с помощью formElement.fieldName. К сожалению, это означает, что если вы назовете поле ввода submit, внезапно встроенная функция formElement.submit() будет заменена вашим элементом ввода. Таким образом, в вашем коде document.signup_form.submit() терпит неудачу, потому что он вызывает элемент, а не метод, и вы не можете вызвать элемент как функцию. Подробнее см. SO QA .

Исправить несложно - изменить:

<input type="submit" name="submit" value="Send Email"> 

до:

<input type="submit" name="submitBtn" value="Send Email">

Кроме того, как уже отмечали другие, вы захотите придать своей форме действительное действие. Кроме того, в целом, может быть предпочтительнее обращаться к вещам по id (document.getElementById()), а не по таким вещам, как document.signup_form.

0 голосов
/ 25 мая 2019

В элементе <form> отсутствует значение в атрибуте action. Цитирую спецификации:

Вы также должны указать URL-адрес службы, которая будет обрабатывать отправленные данные, используя атрибут действия

Ссылка здесь

...