Hangi gönder düğmesine tıklandığına bağlı olarak ana formu nasıl seçerim?


125

Üzerinde 3 form bulunan bir web sayfam var. İç içe değil, sadece birbiri ardına (neredeyse aynıdırlar, yalnızca farklı olan gizli bir değişken). Bir kullanıcı yalnızca bir formu dolduracak ve tüm formları tek bir JS komut dosyasıyla doğrulamak istiyorum / etc.

Öyleyse, bir kullanıcı 1 numaralı formdaki gönder düğmesini tıkladığında, js komut dosyamın yalnızca form1'deki alanlarla ilgilenmesini sağlarım? $ (This) .parents ile bir ilgisi olduğunu anlıyorum, ancak onunla ne yapacağımdan emin değilim.

Doğrulama komut dosyam (başka bir yerde kullandığım, yalnızca tek bir formla) şuna benzer:


$(document).ready(function(){
    $("#submit").click(function(){
        $(".error").hide();
        var hasError = false;

        var nameVal = $("#name").val();
        if(nameVal == '') {
            $("#name").after('Please enter your name.');
            hasError = true;
        }


        if(hasError == false) {blah blah do all the processing stuff}

Öyleyse, $ ("# isim"). Val () gibi şeyleri $ (bu) .parents ('form']. Name.val () ile değiştirmem gerekiyor mu? Yoksa bunu yapmanın daha iyi bir yolu var mı?

Teşekkürler!

Yanıtlar:


191

Formu şu şekilde seçebilirsiniz:

$("#submit").click(function(){
    var form = $(this).parents('form:first');
    ...
});

Ancak, alanlardan birindeki enter tuşuna basarak gönderirken bile tetikleyeceğinden, olayı formun gönder olayına eklemek genellikle daha iyidir:

$('form#myform1').submit(function(e){
     e.preventDefault(); //Prevent the normal submission action
     var form = this;
     // ... Handle form submission
});

Form içindeki alanları seçmek için form bağlamını kullanın. Örneğin:

$("input[name='somename']",form).val();

Tüm giriş alt öğelerini seçmek için de kullanabilirsiniz: $ (this) .children (). Filter ("input")
Pim Jager

veya $ ("input, textarea, select", form)
Eran Galperin

1
Neden var form = $(this).formnormal Javascript'teki gibi kullanamıyorsunuz : function onClick(button) { var form = button.form; } ???
Chloe

65

Bir giriş öğesinin biçimini nasıl bulacağımı ararken bu yanıtı buldum. Bir not eklemek istedim çünkü artık kullanmaktan daha iyi bir yol var:

var form = $(this).parents('form:first');

JQuery'ye ne zaman eklendiğinden emin değilim, ancak en yakın () yöntemi tam olarak gerekli olanı parent () kullanmaktan daha temiz bir şekilde yapıyor. En yakın kod şu şekilde değiştirilebilir:

var form = $(this).closest('form');

Yukarıya doğru ilerler ve aradığınız şeyle eşleşen ilk öğeyi bulur ve orada durur, bu nedenle belirtmeye gerek yoktur: ilk.


47

Gönderinin içinde olduğu formu almak için neden sadece

this.form

Sonuca giden en kolay ve en hızlı yol.


3
neden jquery sarmalayıcıya ihtiyaç var!
redsquare

3
Çünkü bu da jQuery sorusu olarak sorulmuştu. Ve kabul edilen yanıt da bir jQuery nesnesi döndürdüğünden, bunun güzel olacağını düşündüm. Tüm "neden bunu jQuery ile yapabiliyorken aynı şekilde yapabiliyorsanız" bir kenara.
grip

4

aşağıdaki yöntemi kullandım ve benim için iyi çalıştı

$('#mybutton').click(function(){
        clearForm($('#mybutton').closest("form"));
    });

$('#mybutton').closest("form") benim için hile yaptı.


3

Eileen: Hayır, değil var nameVal = form.inputname.val();. Ya olmalı ...

jQuery'de:

// you can use IDs (easier)

var nameVal =  $(form).find('#id').val();

// or use the [name=Fieldname] to search for the field

var nameVal =  $(form).find('[name=Fieldname]').val();

Veya JavaScript'te:

var nameVal = this.form.FieldName.value;

Veya bir kombinasyon:

var nameVal = $(this.form.FieldName).val();

JQuery ile, formdaki tüm girişler arasında geçiş yapabilirsiniz:

$(form).find('input, select, textarea').each(function(){

  var name = this.name;
  // OR
  var name = $(this).attr('name');

  var value = this.value;
  // OR
  var value = $(this).val();
  ....
  });
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.