jQuery - gönderimde ek parametreler ekle (ajax DEĞİL)


206

JQuery'nin 'gönder' seçeneğini kullanarak bir forma ek parametreler iletmenin bir yolu var mı? Ben Ajax ile bunu yapmak istemiyorum - bu normal, yenileme tipik form gönderme.

$('#submit').click(function () {
    $('#event').submit(function () {
        data: { 
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    });
});

Hangi sunucu tarafı teknolojisini kullanıyorsunuz?
Enrique

Göndermeden önce serileştirilmiş bir forma eklenen cevabımı [buraya] [1] bakın. [1]: stackoverflow.com/questions/17809056/…
Jeff Lowery

Yanıtlar:


371

Bu benim için yaptı:

var input = $("<input>")
               .attr("type", "hidden")
               .attr("name", "mydata").val("bla");
$('#form1').append(input);

Daff'ın cevabına dayanıyor, ancak form koleksiyonunda gösterilmesine izin vermek için NAME özniteliğini ekledi ve VALUE değerini VAL olarak değiştirdi Ayrıca FORM'un kimliğini de kontrol ettim (benim durumumda form1)

öğenin eklenip eklenmediğini kontrol etmek için Firefox firebug'unu kullandı.

Gizli öğeler form koleksiyonuna geri gönderilir, yalnızca salt okunur alanlar atılır.

Michel


46
İkilide 'sen benim güneş ışığımsın' nasıl söyleyebilirim? Çok teşekkür ederim. Bu pek çok şeyi çözer.
Ciel

38
Okunabilirliği biraz geliştirebilirsiniz: var input = $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}); $ ( '# form1') ekleme ($ (giriş)).;
Konstantine Kalbazov

2
$ ("<input>") .attr ("tür", "gizli"). attr ("ad", "verilerim"). val ("bla"). appendTo ('# form1'); başka bir yol
kiev

6
Bir kombinasyonunu beğendim: $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}). AppendTo ("# form1");
gabeio

Veri boyutunda bir sınırlama yok mu? JSON.stringify (obj) ve bu yöntemi kullanarak bazı büyük nesne gönderdim ve kesilmiş gibi görünüyordu.
omikron

26

Sizin durumunuzda, formunuza dinamik olarak başka bir gizli alan eklemeniz yeterli olacaktır.

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));

Göndermem gereken veriler form özellikli değil. Sunucu tarafında yakalanması ve kullanılması gerekir.
Ciel

"Form yetenekli değil" ile ne demek istiyorsun?
Vincent Ramdhanie

Üzgünüm - bu hiç işe yaramadı. Sadece zorunlu verilerle bile, forma enjekte etmez.
Ciel

Bir form alanına yerleştirilemez.
Ciel

2
Onun bir dize bir form alanına konabilir
PetersenDidIt

19

Bunu bile kullanabilirsiniz. benim için iyi çalıştı

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit();

bu, btnsubmit = register.php formuna GET değeri olarak kaydet'i gönderir.


Bu daha zarif bir çözüm gibi görünüyor. encodeURIComponent()Veri türüne bağlı olarak parametre değeri için kullanmayı unutmayın .
Andres SK

1
Bu, kullanıcının formu birden çok kez göndermesine izin verdiğinde aslında daha iyidir. Form, farklı değerlere sahip birden fazla gizli alan almayacak.
Mellon

11

Bir forma gizli alanlar eklemenize izin veren bir jQuery işlevi yazabilirsiniz:

// This must be applied to a form (or an object inside a form).
jQuery.fn.addHidden = function (name, value) {
    return this.each(function () {
        var input = $("<input>").attr("type", "hidden").attr("name", name).val(value);
        $(this).append($(input));
    });
};

Ve göndermeden önce gizli alanı ekleyin:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return')
                    .submit();

1
Bkz stackoverflow.com/questions/2601223/... addHidden daha gelişmiş versiyonu için
Jonathan

1
Bu çözümün basitliğini seviyorum. Birçok davayı ele almaz, ancak davayı iyi idare eder.
Phil

11

Gönderme olayını, gönderme düğmesine tıklamanızla bağlamanıza gerek yoktur, sadece gönderme olayını bağlar ve gönderme olayını nasıl tetiklendiğini yakalayamaz.

Ne yapmak istediğinizi düşünün, sıralamayı ajax ile göndermek gibi. Bunun gibi bir şey yapmayı deneyin:

var form = $('#event').submit(function () {
    $.each($('#attendance').sortable('toArray'),function(i, value){
        $("<input>").attr({
            'type':'hidden',
            'name':'attendace['+i+']'
        }).val(value).appendTo(form);
    });
});

hala sunucu tarafında formcollection görünmüyor ... bir sunucuda göstermek için gizli bir alan almak için yapmak zorunda özel bir şey var mı? Bir FormCollection nesnesi kullanarak C # / ASP.NET MVC üzerinden gidiyor.
Ciel

Cevabımı güncelledim, ne yapmaya çalıştığınızı anladığımı düşünüyorum.
PetersenDidIt

nameOluşturulan gizli form girişine bir özellik mi ekliyorsunuz ? Gereğince stackoverflow.com/questions/504681/... formcollection nesneleri tüm ihtiyaç gibi görünüyor <input>ismin varmış unsurları.
npdoty

Evet, virgülle ayrılmış değerler dizesi olarak formcollection içine bir sıralı itmeye çalışıyorum. Güncellemenizi denedim ve hala yayınlamıyor. Neyi yanlış yaptığımdan emin değilim ... Yardımı takdir ediyorum.
Ciel

Sorun, istemci tarafında değil, sunucu tarafında gibi görünüyor.
PetersenDidIt

2

Benzer cevap, ama sadece kolay / hızlı bir test için kullanılabilir hale getirmek istedim.

var input = $("<input>")
               .attr("name", "mydata").val("go Rafa!");

$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>



<form id="easy_test">
  
</form>

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.