Отправка формы с помощью тега <a></a> через javascript
Я использую этот код для отправки формы с тегом, но он не работает
html файл
<form id="my_form" method="post">
{% csrf_token %}
{{form.as_p}}
<input type="number" name="conf" ><a onclick="document.getElementById('my_form').submit();" href="{% url 'signup' 0 %}">ارسال کد</a>
<br><br>
<button type="submit">ثبت نام</button>
</form>
журнал консоли
"GET /signup/0 HTTP/1.1" 200 1531
Вывод, который я ожидаю
"POST /signup/0 HTTP/1.1" 200
Я полагаю, что ваша проблема заключается в следующей строке
<a onclick="document.getElementById('my_form').submit();" href="{% url 'signup' 0 %}">Send Code</a>
Поскольку это ссылка, браузер будет обрабатывать ее нажатие. Вам нужно добавить return false;
в обработчик клика, чтобы остановить браузер, следующий за ссылкой, или event.preventDefault()
.
Возможно, стоит упомянуть, что атрибут href
тогда ничего не сделает. Разве что сделает <a>
настоящей ссылкой, фокусируемой и активируемой.
<a onclick="document.getElementById('my_form').submit(); return false;" href="{% url 'signup' 0 %}">Send Code</a>
Выполнение различных действий из одной и той же формы
Но в любом случае, кнопка была бы более уместна, поскольку вы также отправляете форму.
Ваш атрибут href
и текст ссылки создают впечатление, что вы хотите по-прежнему отправить форму, но предпринять другое действие при нажатии кнопки "Отправить код". Для этого HTML предлагает использовать несколько кнопок отправки с разными именами, которые потом можно будет различать на сервере.
Или вы можете добавить атрибут formaction
к кнопке, чтобы отправить форму на другой URL.
<form id="my_form" method="post">
{% csrf_token %}
{{form.as_p}}
<label for="conf">Code</label>
<input type="text" id="conf" name="conf" inputmode="numeric" pattern="\d+">
<button type="submit" name="send_code">Send Code</button>
OR
<button type="submit" formaction="{% url 'signup' 0 %}">Send Code</button>
<br><br>
<button type="submit" name="submit">Login</button>
</form>
Обратите внимание, что я добавил метку к полю кода, поскольку каждый ввод нуждается в метке. И я изменил тип ввода для кода, поскольку type="number"
не является правильным типом ввода для кодов. Далее мы убедимся, что экранные клавиатуры оптимизированы для ввода чисел, и дадим несколько подсказок для улучшения удобства использования.
<label for="conf">Code</label>
<input type="text" id="conf" name="conf" inputmode="numeric" pattern="\d+" size="6" placeholder="123456">
вы можете использовать функцию на атрибуте click на теге A
Это происходит потому, что сначала при нажатии на тег вы выполняете действие по умолчанию, которое является href в теге. Если не добавить preventDefault()
и если вы хотите отправить форму на ваш url подписки, вам нужно добавить его в тег form :
<form id="my_form" method="post" action="{% url 'signup' 0 %}">
{% csrf_token %}
{{form.as_p}}
<input type="number" name="conf" >
<br><br>
<button type="submit">ثبت نام</button>