Как отправить форму с помощью JavaScript, щелкнув ссылку?


123

Вместо кнопки отправки у меня есть ссылка:

<form>

  <a href="#"> submit </a>

</form>

Могу ли я заставить его отправить форму при нажатии?


Я использую это для интеграции полностью скрытой формы на страницу. Но до и после ссылки есть разрывы строк. Они исходят из элемента формы? И я хотел бы открыть ссылку на новой вкладке / странице, target="_blank"похоже, не работает.
JPT

1
tl; dr <a role="button" aria-label="submit form" href="javascript:void(0)" onclick="document.querySelector('form').submit()">Submit</a>
Джош Хабдас

Ответы:


211

Лучший путь

Лучший способ - вставить соответствующий тег ввода:

<input type="submit" value="submit" />

Лучший способ JS

<form id="form-id">
  <button id="your-id">submit</button>
</form>
var form = document.getElementById("form-id");

document.getElementById("your-id").addEventListener("click", function () {
  form.submit();
});

Заключите последний код JavaScript в DOMContentLoadedсобытие (выберите только loadдля обратной совместимости ), если вы еще этого не сделали:

window.addEventListener("DOMContentLoaded", function () {
  var form = document.... // copy the last code block!
});

Простой, не рекомендуемый способ (предыдущий ответ)

Добавьте onclickатрибут в ссылку и idв форму:

<form id="form-id">

  <a href="#" onclick="document.getElementById('form-id').submit();"> submit </a>

</form>

Все способы

Какой бы способ вы ни выбрали, в formObject.submit()конечном итоге вы получите вызов (где formObjectнаходится объект DOM <form>тега).

Вы также должны привязать такой обработчик событий, который вызывает formObject.submit(), чтобы он вызывался, когда пользователь нажимал определенную ссылку или кнопку. Есть два пути:

  • Рекомендуется: привязать прослушиватель событий к объекту DOM.

    // 1. Acquire a reference to our <form>.
    //    This can also be done by setting <form name="blub">:
    //       var form = document.forms.blub;
    
    var form = document.getElementById("form-id");
    
    
    // 2. Get a reference to our preferred element (link/button, see below) and
    //    add an event listener for the "click" event.
    document.getElementById("your-id").addEventListener("click", function () {
      form.submit();
    });
  • Не рекомендуется: вставлять встроенный JavaScript. Есть несколько причин, по которым этот метод не рекомендуется. Одним из основных аргументов является то, что вы смешиваете разметку (HTML) со скриптами (JS). Код становится неорганизованным, и его трудно поддерживать.

    <a href="#" onclick="document.getElementById('form-id').submit();">submit</a>
    
    <button onclick="document.getElementById('form-id').submit();">submit</button>

Теперь мы подошли к моменту, когда вы должны выбрать элемент пользовательского интерфейса, который запускает вызов submit ().

  1. Кнопка

    <button>submit</button>
  2. Ссылка

    <a href="#">submit</a>

Примените вышеупомянутые методы, чтобы добавить прослушиватель событий.


Я хотел применить это, но, похоже, это не работает с моей стороны. Вот скрипка, jsfiddle.net/rbhr9wt2
user1149244 05

@ user1149244 В панели JavaScript в jsFiddle щелкните «JavaScript», а затем установите для «Тип загрузки» значение «Без переноса - в <body>» (или <head>). По умолчанию он установлен в onLoad, после чего DOMContentReady больше не срабатывает.
ComFreek

3
Примечание. Если в вашей форме есть кнопка с атрибутом attr name="submit", submit()метод вашей формы будет недоступен.
2540625 08

Почему не рекомендуется использовать метод onclick?
nu everest

@nueverest <input type="submit">имеет более смысловое значение , чем, скажем, <a href="#" onclick="...">. Это особенно важно в отношении программ чтения с экрана. Если вам необходимо использовать последнее, я бы предложил использовать ARIA .
ComFreek

65

Если вы используете jQuery и вам понадобится встроенное решение, это сработает очень хорошо;

<a href="#" onclick="$(this).closest('form').submit();">submit form</a>

Кроме того, вы можете заменить

<a href="#">text</a>

с участием

<a href="javascript:void(0);">text</a>

чтобы пользователь не прокручивал страницу вверх при нажатии на ссылку.


1
Я считаю, что было бы предпочтительнее сделать это в <span> тексте </span>. Это не ссылка, и href: javascript не годится. (Скоро станет плохо из-за следующих соображений безопасности ... встроенный javascript когда-нибудь будет запрещен.
Милче Патерн

Я согласен. Судя по характеру вопроса, я пошел на простой ответ. То , что я лично сделать , это использовать , href="#"а затем выбрать все эти связи с помощью JQuery и вызова e.preventDefault()в clickобработчик событий , чтобы браузер не прокручивается.
Морис

3
Я лично предпочитаю этот ответ. Просто, понятно и легко реализовать, если ваша страница использует JQuery. Очень гибкий, так как у меня есть страница с несколькими формами, и она работает безупречно.
Джон Контарино

Можно использовать HREF = «#» , если один добавляет в конце яваскрипта вызова OnClick «возвращение ложных»
LUMIS

23

Вы можете присвоить форме и ссылке несколько идентификаторов, а затем подписаться на onclickсобытие ссылки и submitформы:

<form id="myform" action="" method="POST">
    <a href="#" id="mylink"> submit </a>
</form>

а потом:

window.onload = function() {
    document.getElementById('mylink').onclick = function() {
        document.getElementById('myform').submit();
        return false;
    };
};

Я бы рекомендовал вам использовать кнопку отправки для отправки форм, поскольку она соблюдает семантику разметки и будет работать даже для пользователей с отключенным javascript.


4

HTML и CSS - нет решения для Javascript

Сделайте вашу кнопку похожей на ссылку Bootstrap

HTML:

<form>
    <button class="btn-link">Submit</button>
</form>

CSS:

.btn-link {

    background: none;
    border: none;
    padding: 0px;
    color: #3097D1;
    font: inherit;

}

.btn-link:hover {

    color: #216a94;
    text-decoration: underline;

}

Отлично, зачем усложнять, если можно просто. Однако я думаю, что будет еще лучше, если вы также добавите "cursor: pointer;" в классе hover, поэтому курсор превращается в руку.
Lumis

3

это хорошо работает без каких-либо специальных функций. Намного проще писать на php.<input onclick="this.form.submit()"/>


OP заявил , щелкнув ссылку, а не элемент ввода.
Рахил Вазир

Может ли это сработать, если сделать что-то вроде<input onclick="this.form.submit()"> Some Text</input>
CodyBugstein

2
<form id="mailajob" method="post" action="emailthijob.php">
    <input type="hidden" name="action" value="emailjob" />
    <input type="hidden" name="jid" value="<?php echo $jobid; ?>" />
</form>

<a class="emailjob" onclick="document.getElementById('mailajob').submit();">Email this job</a>

3
Можете ли вы объяснить, как ваш ответ на самом деле отвечает на вопрос? Добавьте к этому больше контекста.

1
document.getElementById("theForm").submit();

В моем случае он отлично работает.

вы также можете использовать его в функции, например,

function submitForm()
{
     document.getElementById("theForm").submit();
} 

Установите "theForm" в качестве идентификатора вашей формы. Это сделано.


0

вот лучшее решение вашего вопроса: внутри формы у вас есть этот код:

<li><a href="#">Singup</a></li>
<button type="submit" id="haha"></button>

в файле CSS сделайте следующее:

button{
  display: none;
}

в JS вы делаете это:

$("a").click(function(){
   $("button").trigger("click");
})

Вот и все.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.