Özdeş Formu İsimler ile jquery Doğrulama

3 Cevap php

Ben 2 şeyler yapan bir form var:

  1. PHP bir ilk isim ve e-posta adresinizi geçmektedir.
  2. Dinamik durumda kullanıcı verilerinin fazla bir veya iki takım göndermek istiyor, bir tıklama ad / e-posta alanlarından yeni bir dizi ekleyin.

Her kullanıcı sunmayı tercih edebilir tam olarak kaç set bilmiyorum çünkü ben ([], ardından bir ad kullanarak) bir dizi PHP verileri aktarmak, bu yüzden bir foreach döngü ve her zaman set her verileri alabilirsiniz. Burada daha iyi anlaşılması için bazı kod:

<form method="post" action="submit.php" id="formID">
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="contacts">
<tr>
	<td><label class="namelabel"><span>Friend's First Name:</span><input type="text" name="friendName[]" class="friendName" id="name1" /></label></td>
	<td><label class="emaillabel"><span>Friend's Email:</span><input type="text" name="friendEmail[]" class="friendEmail" id="email1" /></label></td>
</tr>
</table>
<p class="addmore"><a href="#" id="addclick">Click Here To Send This To More Friends</a></p>
<input type="submit" value="Spread The News!" name="submit" />
	</form>
<script language="javascript" type="text/javascript" src="include/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript" src="include/jquery.validate.pack.js"></script>
<script type="text/javascript">
	$(document).ready(function() {
		fieldCount = 1;
		$("#addclick").click(function(e){
			e.preventDefault();
			fieldCount+=1;
			$('#contacts tr:last').after('<tr><td><label class="namelabel"><span>Friend\'s First Name:</span><input type="text" name="friendName[]" class="friendName" id="name' + fieldCount + '" /></label></td><td><label class="emaillabel"><span>Friend\'s Email:</span><input type="text" name="friendEmail[]" class="friendEmail" id="email' + fieldCount + '" /></label></td></tr>');
		});
		$("#formID").validate({
rules: {
    "friendName[]": "required",
    "friendEmail[]": "required email",
  }
});
    	});
    </script>

Sorun yalnızca ilk friendName [] ve friendEmail [] sunulması geçerliliği olsun, ancak,. Sen (tembel doğrulama tek odak sonra tekmeler gibi) doğrulama çalışma almak için aynı ada sahip başka alanlara tıklayın var

Nasıl bir form alanı için aynı adı kullanabilirsiniz, ve hepsi aynı anda doğrulanmış olsun?

3 Cevap

Her dinamik olarak eklenen öğe benzersiz bir ad gerekiyor, çünkü bu kesin sorun hakkında SO Bu yazıyı kontrol çalışmaz.

Using JQuery Validate Plugin to validate multiple form fields with identical names

Aşağıdaki adımları izleyin.

1) Open jquery.validate.js file
2) Find checkForm: function() {
3) Replace this function with below code.

checkForm: function() {
    this.prepareForm();
    for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
        if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
            for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
                    this.check( this.findByName( elements[i].name )[cnt] );
            }
        } else {
            this.check( elements[i] );
        }
    }
    return this.valid();
}

JQuery deyim biraz titrek değilim. Ancak doğrulamak çağrı eserler bu geri ekleme:

submitHandler: function(form) {
  var els = $('.friendName, .friendEmail');
  for (var i = 0; i < els.length; i++) {
    $(form).validate().element(els[i]);
  }
}

Açıkçası JQuery deyim (aka hlep1!) Bilen birisi ata kaldırmak için els ve döngü olabilir.

Form geçerli kez teslim işleyici yalnızca denir. Her ismin ilk örneği kontrol kez formu geçerlidir. Bir alternatif olduğunu kontrol kaldırmak için eklenti monkeypatch / kesmek olacaktır.