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

339

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

Теги:

21 ответ

354

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

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

Примеры:

Normal

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

АЯКС

$('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() для обработки ошибок и т.д.

  • 3
    Мне не хватало метода сериализации. Очевидно, что я посмотрел на jQuery.com, но их документы на $.post явно деконструируют и реконструируют форму для генерации данных для отправки. Спасибо!
  • 1
    если у меня есть готовые данные, которые я хочу добавить к почтовому запросу (не ajax, форма отправить почтовый запрос) перед отправкой, как мне это сделать?
Показать ещё 2 комментария
90

Вам нужно будет использовать $("#formId").submit().

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

Например:

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

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

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

  • 48
    Если вы используете jQuery, зачем использовать встроенный атрибут onclick?
  • 2
    @BradleyFlood - Как он должен был сделать это вместо этого? Новички, как мы хотели бы знать?
Показать ещё 2 комментария
57

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

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

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

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

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

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

    $(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'];
  • 0
    Почему вы повторно используете селектор формы, почему бы не использовать сам элемент формы?
  • 0
    да, вы могли бы сделать так же: <form id = "myform" onsubmit = "do_stuff ()">, но если файл js загружен позже / defred, эта функция может быть недоступна .. поэтому я подумал об инициализации этого в документе. готов .... я не уверен, если я нахожусь в той же мысли, вы можете проиллюстрировать, что вы до?
Показать ещё 3 комментария
30

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

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

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

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

  • 0
    не могли бы вы опубликовать обновленную ссылку? Ссылка выше больше не работает.
  • 0
    jsfiddle.net/aov8y7ot/4
11

Обратите внимание, что если вы уже установили прослушиватель событий отправки для своей формы, внутренний вызов 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();
    });
8
$("form:first").submit();

См. events/submit.

8

Вы также можете использовать плагин jquery form для отправки с помощью ajax:

http://malsup.com/jquery/form/

7

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

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

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

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

$("#buttonID").click(function() {
    handleForm(this);    
});
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)

Реквизиты для Tommy W @https://stackoverflow.com/questions/3770324/jquerys-form-submit-not-working-in-ie

7
jQuery("a[id=atag]").click( function(){

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

            **OR**

    jQuery(this).parents("#form-id").submit();
});
5

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

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

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

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

$('.my-button').click(function (event) {
    var $target = $( event.target );
    $target.closest("form").submit();
});
4

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

$('#someform').find('input,select,textarea').serialize();
3

вы можете использовать его следующим образом:

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

ИЛИ

document.formName.submit();
2
function  form_submit(form_id,filename){
    $.post(filename,$("#"+form_id).serialize(), function(data){
        alert(data);
    });
}

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

1

вы можете сделать это следующим образом:

$('#myform').bind('submit', function(){ ... });
1

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

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

});
0

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

$("#submit").click(function(event) {
$(this).attr('type','submit');
$(this).click();
});
  • 0
    Такое полезное спасибо @NaveenDA
-2

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню