JQuery [kapalı] kullanarak bir form gönderin


476

JQuery kullanarak bir form göndermek istiyorum. Birisi kodu, bir demosu veya örnek bir bağlantı sağlayabilir mi?

Yanıtlar:


482

Formu normal olarak mı yoksa AJAX çağrısı yoluyla mı gönderiyorsunuz bağlıdır. Örneklerle belgeler de dahil olmak üzere jquery.com'da birçok bilgi bulabilirsiniz . Bir formu normal olarak göndermek submit()için, o sitedeki yöntemi inceleyin. İçin AJAX muhtemelen ya kullanmak istediğiniz rağmen, birçok farklı olasılık vardır ajax()ya post()yöntemleri. post()Bu ajax()yöntemi basitleştirilmiş ve sınırlı bir arayüzle çağırmanın gerçekten kolay bir yolu olduğunu unutmayın .

Her gün kullandığım, yer imi koymanız gereken kritik bir kaynak jQuery Nasıl Çalışır . JQuery kullanımı hakkında öğreticiler vardır ve sol taraftaki gezinme tüm belgelere erişim sağlar.

Örnekler:

Normal

$('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...
                 }
    });
});

Not ajax()ve post()yöntemleri yukarıda eşdeğerdir. ajax()Hataları işleme vb. İsteklere ekleyebileceğiniz ek parametreler vardır .


3
Serileştirme yöntemini kaçırıyordum. Açıkçası, ben jQuery.com baktı, ama onların belgeleri üzerinde $.postaçıkça yapısökmek ve göndermek için veri oluşturmak için formu yeniden yapılandırmak. Teşekkürler!
nomen

1
hazır bazı verilerim varsa göndermeden önce posta isteğine (ajax değil, form gönderme sonrası isteği) eklemek istiyorum, bunu nasıl yapabilirim?
ス レ ッ ク ス

1
@AlexanderSupertramp - yukarıdaki örnekte veriler url kodlu form parametreleri olarak gönderilmiştir. Verileri ek form parametreleri olarak ekleyebilirsiniz. $('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData. Not: ikinci ikisinin URL kullanılarak kodlanması gerekebilir encodeURIComponent(). VEYA - her iki uçta JSON kodlamasını kullanmak için değiştirebilirsiniz, ancak form verilerini ekstra verilerinizle bir JavaScript veri yapısına yerleştirmeniz ve serileştirmeniz gerekir. Bu durumda, büyük olasılıkla serializeArrayformda kullanır ve diğer verilerinizi birleştirirsiniz.
tvanfosson

"Bir json yanıtı bekliyorum" benim için farklı bir sorunu çözdü (yeniden: Flask çağrıları başarısız).
scharfmn

'Gönder' adında bir gönderme düğmeniz varsa, bu sessizce başarısız olur (jQuery) veya "gönder işlevi değildir" (vanilya js) hatası verir. Düğmeyi başka bir şeye yeniden adlandırmak çözülecektir . ¯_ (ツ) _ / ¯ 🤷
fzzylogic

122

Kullanmanız gerekecek $("#formId").submit().

Bunu genellikle bir fonksiyonun içinden çağırırsınız.

Örneğin:

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

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

Bununla ilgili daha fazla bilgiyi Jquery web sitesinde bulabilirsiniz .


55
JQuery kullanıyorsanız neden satır içi onclick özniteliği kullanasınız?
nnnnnn

3
@BradleyFlood - Bunun yerine nasıl yapmalıydı? Bizim gibi yeni başlayanlar bilmek ister misiniz?
MarcoZen

2
@MarcoZen Bence BradleyFlood "Örneğin:" ifadesinin, satır içi onclick özniteliğinin kullanılmasının birkaç olası yoldan biri olduğu anlamına geldiğine işaret ediyordu. Gerçekten de, daha fazla jQuery benzeri .on ('klik', SubmitDetailsForm) kullanır.
Jan Kukacka

@JanKukacka - Not edildi. Teşekkürler.
MarcoZen

71

varolan bir form varsa, şimdi jquery - ajax / post ile çalışması gerekir:

  • formunuzun gönder - etkinliğine asın
  • varsayılan gönderim işlevini engelle
  • kendi eşyalarını yap

    $(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()Yukarıdaki örnekte işlevin çalışması için tüm form öğelerinin nameözniteliklerinin tanımlanmış olması gerektiğini lütfen unutmayın .

Form örneği:

<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 - veriler bu örnekteki POST kullanılarak gönderilir, bu da verilerinize şu yolla erişebileceğiniz anlamına gelir

 $_POST['dataproperty1'] 

burada dataproperty1, json'unuzda bir "değişken adı" dır.

CodeIgniter kullanıyorsanız burada örnek sözdizimi:

 $pdata = $this->input->post();
 $prop1 = $pdata['prop1'];
 $prop1 = $pdata['prop2'];

Neden formun seçicisini yeniden kullanıyorsunuz, neden form öğesinin kendisini yeniden kullanmıyorsunuz?
Slava Fomin II

Evet, bunu da yapabilirsiniz: <form id = "myform" onsubmit = "do_stuff ()">, ancak js daha sonra yüklenirse / ertelenirse bu işlev kullanılamayabilir .. bu yüzden bunu belgede başlatmayı düşündüm. hazır .... ben aynı düşünce üzerinde olup olmadığından emin değilim, nereye kadar gösterebilir miyim?
womd

1
"Name" özelliğinin tanımlanması gerektiğini vurguladığınız için teşekkür ederiz
ccalboni

1
DataType: 'application / json' bir hatadır. DataType: 'json' yazmalıdır. Yukarıdaki örnekte olduğu gibi ayrılırsa ayrıştırma hataları alırsınız.
Hankster

@ Hankster evet, json oldu ama düzenlendi ... Hollander kontrol edebilir / onaylayabilir misiniz?
womd

68

JQuery'de aşağıdakileri tercih ederim:

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

Ama sonra tekrar, bu görevi gerçekleştirmek için gerçekten jQuery'ye ihtiyacınız yok - sadece normal JavaScript kullanın:

document.getElementById("form-id").submit()

1
@windmaomao web sayfanıza jQuery eklediniz mi? Ancak, jQuery istead'ı $ aswell kullanmanız gerekebilir, ancak jQuery dahil değilse, düzenli JS çözümünü kullanmanızı öneririm.
gernberg

1
@windmaomao Aynı sorunu yaşadım. Benim jQuery diğer tüm işlevleri koştu, ancak formu göndermek olmaz. Yalnızca document.getElementById yöntemini kullanarak çalıştı.
ChallengeAccepted

41

Kılavuzdan: jQuery Doc

$("form:first").submit();

3
İlk formu bulmak ve göndermek yerine "id" ile form göndermek, ancak her seferinde yalnızca bir form olması durumunda mükemmel bir şekilde çalışır.
Chintan Thummar

22

Herhangi
biri kullanırsa bilgi

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

Böyle bir şey yapma

<button name = "submit">

Bana gönder () yönteminin bu şekilde çalışmadığını bulmak saatler sürdü.


1
Anahtar kelimedeki "sumit"yazım hatası, yazım hatalarının yanıt olarak istenmediğini veya sorunla ilgili olup olmadığını belirsizleştirir. Şunu mu demek istediniz: "submit"messs up jquery form send () Yoksa sorun standart yerine düğme adını vermeniz mi demek istediniz type="submit"?
Daryn

niyetim bu soruyu cevaplamak değil, bu sorunla karşılaşanlara anlatmaktı. Ben göndermeden önce bazı girişleri kontrol etmek için onclick olay kullandım çünkü sorun türü tanımlanmadan düğme adı ile düşünüyorum. Tür = gönder ise onclick olay ateşim olmadan gönder form gönder.
AZ Soft

16

Formunuzu jquery kullanarak göndermek için kullanın. İşte bağlantı 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
Bu eski bir gönderi olsa da button, formun gönderilmediğinden emin olmak için düğmenize bir tür eklemeye değer (tüm tarayıcılar hiçbir tür içermeyen düğmelere aynı şekilde davranmazlar).
Mikey

@Mikey Öneri için teşekkürler.
Chintan Thummar

14

önyükleyicili bir form gönderilir:

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

rastgele bir yöntemle yeniden biçimlendirilmiş bir form veri sonrası yapmak için bazı hile var http://www.jackart4.com/article.html


güncellenmiş bağlantıyı gönderebilir misiniz? Yukarıdaki bağlantı artık çalışmıyor.
Chris22


12

Formunuz için zaten bir gönderme etkinliği dinleyicisi yüklediyseniz, gönderilecek çağrı ()

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

olmaz o etkinliğe (başarısız olan) teslim bu form için yeni bir olay dinleyicisi yüklemeye çalışır olarak çalışıyorum. Bu nedenle, HTML Öğesinin kendisine erişmeniz (jQquery'den paketini açmanız) ve bu öğede doğrudan send () öğesini çağırmanız gerekir:

    jQuery('#<form-id>').submit( function(e){ 
      e.preventDefault();
      // note the [0] array access:
      if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
    });


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

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

            **OR**

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

7

Internet Explorer'da dinamik olarak oluşturulan formlarla ilgili sorunlar olduğunu unutmayın. IE'de böyle bir form oluşturulmayacaktır (9):

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

IE'de çalışmasını sağlamak için form öğesini oluşturun ve göndermeden önce ekleyin:

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);

Örnek 1'deki gibi bir form oluşturmak ve daha sonra eklemek işe yaramaz - IE9'da bir JScript hatası atar DOM Exception: HIERARCHY_REQUEST_ERR (3)

Tommy W'den aksesuarlar @ https://stackoverflow.com/a/6694054/694325


7

Şimdiye kadarki çözümler formun kimliğini bilmenizi gerektirir.

Kimliği bilmeye gerek kalmadan formu göndermek için bu kodu kullanın:

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

Örneğin, bir düğme için tıklama etkinliğini işlemek istiyorsanız,

$("#buttonID").click(function() {
    handleForm(this);    
});

6

Düğme form etiketleri arasında yer alıyorsa, bu sürümü tercih ederim:

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


4

Dinamik formlar için IE hilesi:

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

3

Yaklaşımım biraz Farklı Düğmeyi gönder düğmesi olarak değiştirin ve ardından

$("#submit").click(function(event) {
$(this).attr('type','submit');
$(this).click();
});

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

Form verilerini AJAX aracılığıyla verilen dosya adınıza gönderir.


1

Her form için kod eklemek zorunda kalmamak için genel bir çözüm öneriyorum. Jquery form eklentisini (http://jquery.malsup.com/form/) kullanın ve bu kodu ekleyin.

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

});

1

şöyle yapabilirsin:

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

-2

Ayrıca Ajax aracılığıyla bir form göndermek (aslında göndermeden) için kullandım:

  jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
    function() {
      alert("Okay!"); 
    });

3
bu bir gönderme () gibi bir şey değildir.
send
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.