Отправить форму, используя jQuery [закрыто]

476

Я хочу отправить форму, используя jQuery. Может ли кто-нибудь предоставить код, пример или ссылку на пример?

Mehul
источник

Ответы:

483

Это зависит от того, отправляете ли вы форму нормально или через AJAX-вызов. Вы можете найти много информации на jquery.com , включая документацию с примерами. Для отправки формы в обычном режиме, проверьте submit()метод на этом сайте. Для AJAX существует множество различных возможностей, хотя вы, вероятно, захотите использовать либо методы, ajax()либо post(). Обратите внимание, что post()на самом деле это просто удобный способ вызова ajax()метода с упрощенным и ограниченным интерфейсом.

Один из важнейших ресурсов, которым я пользуюсь каждый день, стоит отметить, как работает jQuery . В нем есть учебники по использованию jQuery, а левая навигация дает доступ ко всей документации.

Примеры:

Нормальный

$('form#myForm').submit();

AJAX

$('input#submitButton').click( function() {
    $.post( 'some-url', $('form#myForm').serialize(), function(data) {
         // ... do something with response from server
       },
       'json' // I expect a JSON response
    );
});

$('input#submitButton').click( function() {
    $.ajax({
        url: 'some-url',
        type: 'post',
        dataType: 'json',
        data: $('form#myForm').serialize(),
        success: function(data) {
                   // ... do something with the data...
                 }
    });
});

Следует отметить , что ajax()и post()методы выше , являются эквивалентными. Есть дополнительные параметры, которые вы можете добавить в ajax()запрос для обработки ошибок и т. Д.

tvanfosson
источник
3
Мне не хватало метода сериализации. Очевидно, что я посмотрел на jQuery.com, но их документы $.postявно деконструируют и реконструируют форму для генерации данных для отправки. Спасибо!
номен
1
если у меня есть готовые данные, которые я хочу добавить к почтовому запросу (не ajax, форма отправить почтовый запрос) перед отправкой, как мне это сделать?
ス レ ッ ク ス
1
@AlexanderSupertramp - в приведенном выше примере данные отправляются в виде параметров формы в кодировке URL. Вы можете просто добавить данные в качестве дополнительных параметров формы. $('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData, Примечание: последние два, возможно, должны быть закодированы с помощью URL encodeURIComponent(). ИЛИ - вы можете использовать кодирование JSON на обоих концах, но тогда вам нужно будет поместить данные формы в структуру данных JavaScript с вашими дополнительными данными и сериализовать их. В этом случае вы, вероятно, будете использовать serializeArrayв форме и объединять ваши другие данные.
tvanfosson
«Я ожидаю, что ответ json» решил для меня другую проблему (повторение: вызовы Flask не выполняются).
scharfmn
Если у вас есть кнопка «Отправить» с именем «submit», она либо будет тихо завершена с ошибкой (jQuery), либо выдаст ошибку, говорящую «submit is not function» (vanilla js). Переименование кнопки на что-нибудь еще разрешит . ¯_ (ツ) _ / ¯ 🤷
fzzylogic
122

Вам придется использовать $("#formId").submit().

Обычно вы вызываете это изнутри функции.

Например:

<input type='button' value='Submit form' onClick='submitDetailsForm()' />

<script language="javascript" type="text/javascript">
    function submitDetailsForm() {
       $("#formId").submit();
    }
</script>

Вы можете получить больше информации об этом на веб-сайте Jquery .

Дракон
источник
55
Если вы используете jQuery, зачем использовать встроенный атрибут onclick?
nnnnnn
3
@BradleyFlood - Как он должен был сделать это вместо этого? Новички, как мы хотели бы знать?
MarcoZen
2
@MarcoZen Я думаю, что BradleyFlood указывал, что фраза «Например:» означает, что использование встроенного атрибута onclick является лишь одним из нескольких возможных способов. Действительно, более jQuery-подобный будет использовать .on ('click', submitDetailsForm).
Ян Кукацка
@JanKukacka - отметил. Спасибо.
MarcoZen
71

если у вас есть существующая форма, теперь она должна работать с jquery - ajax / post, теперь вы можете:

  • повесь на отправку - событие вашей формы
  • запретить функцию отправки по умолчанию
  • делай свои вещи

    $(function() {
        //hang on event of form with id=myform
        $("#myform").submit(function(e) {
    
            //prevent Default functionality
            e.preventDefault();
    
            //get the action-url of the form
            var actionurl = e.currentTarget.action;
    
            //do your own request an handle the results
            $.ajax({
                    url: actionurl,
                    type: 'post',
                    dataType: 'application/json',
                    data: $("#myform").serialize(),
                    success: function(data) {
                        ... do something with the data...
                    }
            });
    
        });
    
    });

Обратите внимание, что для того, чтобы serialize()функция работала в приведенном выше примере, все элементы формы должны иметь свой nameатрибут.

Пример формы:

<form id="myform" method="post" action="http://example.com/do_recieve_request">

<input type="text" size="20" value="default value" name="my_input_field">
..
.
</form>

@PtF - в этом примере данные отправляются с использованием POST, поэтому вы можете получить к ним доступ через

 $_POST['dataproperty1'] 

где dataproperty1 - это имя переменной в вашем json.

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

 $pdata = $this->input->post();
 $prop1 = $pdata['prop1'];
 $prop1 = $pdata['prop2'];
womd
источник
Почему вы повторно используете селектор формы, почему бы не использовать сам элемент формы?
Слава Фомин II
да, вы могли бы сделать так же: <form id = "myform" onsubmit = "do_stuff ()">, но если файл js загружен позже / defred, эта функция может быть недоступна .. поэтому я подумал об инициализации этого в документе. готов .... я не уверен, если я нахожусь в той же мысли, вы можете проиллюстрировать, что вы до?
Womd
1
Спасибо за выделение, что атрибут "name" должен быть определен
ccalboni
1
DataType: 'application / json' является ошибкой. Должен читать dataType: 'json'. Вы получите ошибки разбора, если оставить их, как в примере выше.
Hankster
@ Хэнкстер, да, был json, но его отредактировали ... Холландер, можешь проверить / подтвердить?
womd
68

В jQuery я бы предпочел следующее:

$("#form-id").submit()

Но опять же, вам действительно не нужен jQuery для выполнения этой задачи - просто используйте обычный JavaScript:

document.getElementById("form-id").submit()
gernberg
источник
1
@windmaomao Вы включили JQuery на своей веб-странице? Возможно, вам потребуется использовать jQuery вместо $ aswell - я рекомендую использовать обычное решение JS, если вы уже не включили jQuery.
Гернберг
1
@windmaomao У меня была такая же проблема. Мой jQuery запускал все остальные функции, но не отправлял форму. Это работало, просто используя метод document.getElementById.
Вызов
41

Из руководства: JQuery Doc

$("form:first").submit();
AdamSane
источник
3
Нужно отправить форму по «id», чем найти первую форму и отправить ее. Однако она будет отлично работать, если одновременно будет только одна форма.
Chintan Thummar
22

Для информации,
если кто-то использует

$('#formId').submit();

Не как то так

<button name = "submit">

Потребовалось много часов, чтобы найти меня, что submit () не будет работать так.

AZ Soft
источник
1
Опечатка по ключевому слову "sumit"делает неясным, была ли опечатка неуместной в ответе или была связана с проблемой. Вы имеете в виду, что кнопка с именем "submit"портит jquery форму submit ()? Или вы имеете в виду проблему в том, что вы дали название кнопки submit вместо стандартного type="submit"?
Дарин
я намеревался не ответить на этот вопрос, а рассказать тем, кто столкнулся с этой проблемой. Я думаю, что проблема с именем кнопки без определенного типа, потому что я использовал событие onclick, чтобы проверить некоторые входные данные перед отправкой. Если type = submit, то форма submit без моего события onclick.
AZ Soft
16

Используйте его для отправки формы с помощью jquery. Вот ссылка http://api.jquery.com/submit/

<form id="form" method="post" action="#">
    <input type="text" id="input">
    <input type="button" id="button" value="Submit">
</form>

<script type="text/javascript">
$(document).ready(function () {
    $( "#button" ).click(function() {
        $( "#form" ).submit();
    });
});
</script>
Чинтан Туммар
источник
2
Хотя это старый пост, стоит добавить buttonк кнопке тип , чтобы форма не отправлялась (поскольку не все браузеры одинаково обрабатывают кнопки без типов).
Майки
@Mikey Спасибо за предложение.
Чинтан Туммар
14

это отправит форму с preloader:

var a=$('#yourform').serialize();
$.ajax({
    type:'post',
    url:'receiver url',
    data:a,
    beforeSend:function(){
        launchpreloader();
    },
    complete:function(){
        stopPreloader();
    },
    success:function(result){
         alert(result);
    }
});

У меня есть хитрость, чтобы сделать пост данных формы преобразованным случайным методом http://www.jackart4.com/article.html

Jacky
источник
не могли бы вы опубликовать обновленную ссылку? Ссылка выше больше не работает.
Chris22
12

Обратите внимание, что если вы уже установили прослушиватель события submit для своей формы, внутренний вызов метода submit ()

jQuery('#<form-id>').submit( function(e){ 
    e.preventDefault();
    // maybe some validation in here
    if ( <form-is-valid> ) jQuery('#<form-id>').submit();
});

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

    jQuery('#<form-id>').submit( function(e){ 
      e.preventDefault();
      // note the [0] array access:
      if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
    });
gutschilla
источник
7
jQuery("a[id=atag]").click( function(){

    jQuery('#form-id').submit();      

            **OR**

    jQuery(this).parents("#form-id").submit();
});
GKumar00
источник
7

Обратите внимание, что в Internet Explorer есть проблемы с динамически создаваемыми формами. Форма, созданная таким образом, не будет отправлена ​​в IE (9):

var form = $('<form method="post" action="/test/Delete/">' +
             '<input type="hidden" name="id" value="' + myid + '"></form>');
$(form).submit();

Чтобы заставить его работать в IE, создайте элемент формы и прикрепите его перед отправкой следующим образом:

var form = document.createElement("form");
$(form).attr("action", "/test/Delete")
       .attr("method", "post");
$(form).html('<input type="hidden" name="id" value="' + myid + '" />');
document.body.appendChild(form);
$(form).submit();
document.body.removeChild(form);

Создание формы, как в примере 1, а затем ее присоединение не будет работать - в IE9 выдается ошибка JScript DOM Exception: HIERARCHY_REQUEST_ERR (3)

Реквизит Томми W @ https://stackoverflow.com/a/6694054/694325

Nenotlep
источник
7

Решения до сих пор требуют, чтобы вы знали идентификатор формы.

Используйте этот код для отправки формы без необходимости знать идентификатор:

function handleForm(field) {
    $(field).closest("form").submit();
}

Например, если вы хотите обработать событие нажатия кнопки, вы можете использовать

$("#buttonID").click(function() {
    handleForm(this);    
});
muzzamo
источник
6

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

$('.my-button').click(function (event) {
    var $target = $( event.target );
    $target.closest("form").submit();
});
Tk421
источник
4

Вы можете использовать это так:

  $('#formId').submit();

ИЛИ

document.formName.submit();
Рам Ч. Bachkheti
источник
4

IE трюк для динамических форм:

$('#someform').find('input,select,textarea').serialize();
user2320873
источник
3

Мой подход немного отличается. Измените кнопку на кнопку отправки и затем нажмите

$("#submit").click(function(event) {
$(this).attr('type','submit');
$(this).click();
});
NaveenDA
источник
2
function  form_submit(form_id,filename){
    $.post(filename,$("#"+form_id).serialize(), function(data){
        alert(data);
    });
}

Он будет публиковать данные формы на ваше имя файла через AJAX.

kdniazi
источник
1

Я рекомендую универсальное решение, поэтому вам не нужно добавлять код для каждой формы. Используйте плагин формы jquery (http://jquery.malsup.com/form/) и добавьте этот код.

$(function(){
$('form.ajax_submit').submit(function() {
    $(this).ajaxSubmit();
            //validation and other stuff
        return false; 
});

});
danidacar
источник
1

Вы можете сделать это так:

$('#myform').bind('submit', function(){ ... });
vdegenne
источник
-2

Я также использовал следующее для отправки формы (без фактической отправки) через Ajax:

  jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
    function() {
      alert("Okay!"); 
    });
Брайан Ньюман
источник
3
это не что-то вроде submit (). во-
первых