Permalänk
Medlem

jqeury input validering

Hej!

Jag har skrivit ett script för att loopa ut x antal formulär, beroende på hur många användaren väljer att loopa:

$('#form').hide(); // Loop out selected number of form fields. $('#count').submit(function() { $('#form').show(); var i = 1; var counter = $('#counter').val(); var repeatable = $('.repeatable'); if(counter<16) { while(i<counter) { repeatable.clone().appendTo('#form').addClass("person"+(i+1)).wrap("<div class='person' />"); $('.person'+(i+1)).before('<h2>Person '+(i+1)+'</h2>'); i++; } } else { alert('Du får inte anmäla fler än 15 personer.'); } $('#submit').appendTo('#form'); $('#count').hide(); return false; }); // Loop function ends here.

Efter detta så tänkte jag validera varje formulär, så här ser valiteringen ut för första fältet (.fname):

$('.fname').blur(function() { var strlen = $(this).val().length; if(strlen>20||strlen<1) { $(this).next('p').slideDown(); } else { $(this).next('p').slideUp(); } });

Detta fungerar för det första formuläret, men på de andra formulären händer det ingenting. Det finns ett formulär hårdkodat i html-filen, resterande kopieras med jquery och skrivs ut. Jag misstänker att det här kan ha att göra med att valideringen händer innan jquery hunnit skriva ut alla formulär, kan jag ha rätt? Hur löser jag detta i så fall?

Visa signatur

Asus Zenbook UX32VD-R4002V.

Permalänk

Testa att använda .on() och se om det fungerar.

Permalänk
Medlem
Skrivet av Sephinator:

Testa att använda .on() och se om det fungerar.

Hur menar du då, så här?

$('.fname').on("blur", (function() { var strlen = $(this).val().length; if(strlen>20||strlen<1) { $(this).next('p').slideDown(); } else { $(this).next('p').slideUp(); } });

Vad är skillnaden på de två sätten?

Visa signatur

Asus Zenbook UX32VD-R4002V.

Permalänk
Skrivet av kon87:

Hur menar du då, så här?

$('.fname').on("blur", (function() { var strlen = $(this).val().length; if(strlen>20||strlen<1) { $(this).next('p').slideDown(); } else { $(this).next('p').slideUp(); } });

Vad är skillnaden på de två sätten?

Yes. Det borde fungera!

Det är det här felet du har. Men i version 1.7 av jQuery ändrades .live(); till .on();.

[quote=jQuery API]
The .on() method attaches event handlers to the currently selected set of elements in the jQuery object. As of jQuery 1.7, the .on() method provides all functionality required for attaching event handlers. For help in converting from older jQuery event methods, see .bind(), .delegate(), and .live(). To remove events bound with .on(), see .off(). To attach an event that runs only once and then removes itself, see .one()
[/quote]