Hallo,

Ik probeer via Jquery validation een geboorte datum te valideren. Dit werkt goed tot dat ik een stukje script toepas om een V (goed) teken te krijgen. Dan werkt ineens de groups functie niet meer.


<!DOCTYPE html>
<html lang="nl-NL">
<head>

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/additional-methods.min.js"></script>
<script src="/js/test_datum1.js"></script>
</head>

<body>
   
<form  action="" name="registratieformulier" method="post" id="register_form">
	
<fieldset>
<label for="leeftijd">Geboorte datum:*</label>            
 <select id="dagen" name="dagen" class="leeftijd">
  <option value="">Dag</option><option value="1">1</option><option value="2">2</option>
</select>

<select id="maanden" name="maanden" class="leeftijd">
 <option value="">Maand</option><option value="January">januari</option><option value="February">februari</option>
</select>

<select id="jaren" name="jaren" class="leeftijd">
 <option value="">Jaar</option><option value="2018">2018</option><option value="2017">2017</option> 
</select>
</fieldset>
		
<fieldset>
 <button type="submit" name="register" class="b_verzenden" value="verzenden">Verzenden</button>
</fieldset>
</form>
 
</body>
</html>



$().ready(function() {
	
	$("#register_form").validate({
			onkeyup: false, // Valideren werkt pas na de tab ipv bij elke toetsaanslag
			groups: {
        		nameGroup: "dagen maanden jaren"
    		},
			rules: {
				firstname: {
					required: true,
				},
				dagen: {
					required: true,
				},
				maanden: {
					required: true,
				},
				jaren: {
					required: true,

				},
				
			},
			messages: {
				dagen: {
					required: 'Vul de volledige geboorte datum in.',
				},
				maanden: {
					required: 'Vul de volledige geboorte datum in.',
				},
				jaren: {
					required: 'Vul de volledige geboorte datum in.',
					
			}
		},
		
	});
});


Bij bovenstaande werkt het gewoon goed. Maar voeg ik dit stukje toe dan werkt het bij alle overige velden goed alleen bij de datum niet dan komt er een V'tje bij elke select ipv alleen bij de groep.


$().ready(function() {
	
	$("#register_form").validate({
			onkeyup: false, // Valideren werkt pas na de tab ipv bij elke toetsaanslag
			groups: {
        		nameGroup: "dagen maanden jaren"
    		},
			rules: {
				firstname: {
					required: true,
				},
				dagen: {
					required: true,
				},
				maanden: {
					required: true,
				},
				jaren: {
					required: true,

				},
				
			},
			messages: {
				dagen: {
					required: 'Vul de volledige geboorte datum in.',
				},
				maanden: {
					required: 'Vul de volledige geboorte datum in.',
				},
				jaren: {
					required: 'Vul de volledige geboorte datum in.',
					
			}
		},
		success: function (element) {
        element.text('✓').addClass('valid')
        .closest('.register_form').removeClass('error').addClass('success');
    }
		
	});
});
Erwin b op 18/05/2018 11:40:21

Hallo,

Ik probeer via Jquery validation een geboorte datum te valideren. Dit werkt goed tot dat ik een stukje java toepas om een V (goed) teken te krijgen.

Je bedoeld Javascript. Java is heel wat anders. ;-)
Oeps "shame".
Maar voeg ik dit stukje toe dan werkt het bij alle overige velden goed alleen bij de datum niet dan komt er een V'tje bij elke select ipv alleen bij de groep.

Wat zou er moeten gebeuren dan? Heb je je elementen al geïnspecteerd om te zien wat er precies gebeurt?

Er is in ieder geval geen klasse register_form, enkel een id register_form, dus wellicht moet je die punt in je .closest() selector veranderen in een #.
Het aanpassen van de . naar een # was geen succes.
Als de geboorte datum niet volledig is ingevuld komt er een foutmelding. De geboorte datum bestaat uit drie select velden dag, maand, jaar. Deze drie zijn een groep voor Jquery validation zodat er maar 1 melding komt voor alle drie de opties. Pas ik nu het stukje script toe dan is het geen groep meer. Als er dan bv alleen een dag wordt ingevuld dan verdwijnt al gelijk de foutmelding en komt het V'tje al terwijl maand en jaar nog niet zijn ingevuld.
Misschien heb je hier iets aan, met errorPlacement kun je bepalen waar je de foutmelding toont:
$().ready(function() {
    $("#register_form").validate({
        'groups': {
            'leeftijd': 'dagen maanden jaren'
        },
        'rules': {
            'firstname':    {'required': true },
            'dagen':        {'required': true },
            'maanden':      {'required': true },
            'jaren':        {'required': true }
        },
        'messages': {
            'firstname':    { 'required': 'Dit veld is verplicht.' },
            'dagen':        { 'required': 'Vul de volledige geboorte datum in.' },
            'maanden':      { 'required': 'Vul de volledige geboorte datum in.' },
            'jaren':        { 'required': 'Vul de volledige geboorte datum in.' }
        },
        'errorPlacement': function(error, element) {
            // toon melding op vaste plaats voor specifieke elementen
            if (['dagen', 'maanden', 'jaren'].indexOf(element.attr('name')) > -1) {
                error.insertAfter('#jaren');
            } else {
                // toon melding gewoon achter het veld
                error.insertAfter(element);
            }
        }
    });
});
Bedankt voor de reactie. Het scriptje heeft in mijn geval niet geholpen.
Het is niet te specificeren waar de error melding komt. Maar met de "groups" toevoeging komt de error melding al standaard achter jaar te staan.

Ik zie nu wat er fout gaat. Eigenlijk werkt alles theoretisch goed, maar praktisch is het niet goed.

Elke select (dag, maand, jaar) heeft zijn eigen class. Bij niet invullen is die error, bij wel invullen is die viled. Door dat het een group is verdwijnt de foutmelding als alles viled is. Dus de hele errror afhandeling gaat goed.

Het gaat mis bij de viled afhandeling.
Dat stukje script plaatst een V'tje bij elke viled class. Dus als alleen dag is ingevuld dan krijgt select van dag al een viled class en dus gelijk een V'tje terwijl maand en jaar nog moeten.

Ik heb hier een voorbeeld met CSS zodat het misschien duidelijker is. Het gaat dan alleen om dit kleine stukje script

success: function (element) {
        element.text('?').addClass('valid')
        .closest('#register_form').removeClass('error').addClass('success');
    }

Als je dat weg haalt zie je goed het verschil.

http://jsfiddle.net/xxEdwinxx/MX6ru/58/
Bedank, Ik had na mijn idee bijna alles gehad van Stackoverflow ik had alleen gezocht op validate group zonder de succes. Ik ga er mee puzzelen bedankt voor het mee denken.

Reageren