Ik maak gebruik van jQuery UI tabs om een soort "Wizard" formulier te maken. De interface werkt prima. Je klikt op volgende en dan pas wordt het volgende tabblad actief en kan je er naar toe.
Mijn tabs en de velden erop vormen samen een formulier, maar ik zou de validatie per tabblad willen laten verlopen.
Er zijn wel voorbeelden te vinden van validatie met tabbladen maar niet in de "Wizard" stijl. Verder zijn er wat oplossingen te vinden die een dergelijk iets wel toepassen maar deze zijn me niet dynamisch genoeg (hard verwijzingen etc) of hebben een custom validatie. Ik zou graag van de validate() functie van jquery zelf gebruik willen maken.
Het probleem waar ik zelf tegen aan loop is dat als ik op het eerste tab een veld verplicht maak, en ook op het tweede tab dat je niet naar de volgende tabs kan springen omdat de validatie namelijk meldt dat op tab2 nog geen waarde is opgegeven. Ondanks dat je dus nog op tab1 zit en daar een waarde hebt opgegeven..
Is er iemand die dit wel eens gedaan heeft of hier een idee over heeft?
Dit is de code die ik gebruik:
Mijn tabs en de velden erop vormen samen een formulier, maar ik zou de validatie per tabblad willen laten verlopen.
Er zijn wel voorbeelden te vinden van validatie met tabbladen maar niet in de "Wizard" stijl. Verder zijn er wat oplossingen te vinden die een dergelijk iets wel toepassen maar deze zijn me niet dynamisch genoeg (hard verwijzingen etc) of hebben een custom validatie. Ik zou graag van de validate() functie van jquery zelf gebruik willen maken.
Het probleem waar ik zelf tegen aan loop is dat als ik op het eerste tab een veld verplicht maak, en ook op het tweede tab dat je niet naar de volgende tabs kan springen omdat de validatie namelijk meldt dat op tab2 nog geen waarde is opgegeven. Ondanks dat je dus nog op tab1 zit en daar een waarde hebt opgegeven..
Is er iemand die dit wel eens gedaan heeft of hier een idee over heeft?
Dit is de code die ik gebruik:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
| <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title></title> <link type="text/css" href="css/custom-theme/jquery-ui-1.7.2.custom.css" rel="stylesheet" /> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script> <script type="text/javascript"> $(document).ready(function() { // disable de tabs behalve de eerste (0) $('#tabs').tabs({ disabled: [1,2] }); var validator = $("#gsmwissel").validate({ errorPlacement: function(label, element) { label.insertAfter(element); }, rules: { naam:{ required: true, minlength: 2 }, adres:{ required: true, minlength: 2 } }, messages: { naam:{ required: " Naam is een verplicht veld", minlength: jQuery.format(" Naam moet minimaal 2 tekens bevatten") }, } }); // voeg overal de volgende en vorige link toe. var $tabs = $('#tabs').tabs(); $(".tabs").each(function(i){ var totalSize = $(".tabs").size() - 1; if (i != totalSize) { next = i + 2; $(this).append("<a href='#' class='next-tab' rel='" + next + "'>Volgende »</a>"); } if (i != 0) { prev = i; $(this).append("<a href='#' class='prev-tab' rel='" + prev + "'>« Vorige</a>"); } }); // springen naar volgende en vorige tab. Bij volgende tab enablen we die direct. $('.next-tab').click(function() { if(validator.form()) { $tabs.tabs('enable', $(this).attr("rel")-1); $tabs.tabs('select', $(this).attr("rel")); return false; } }); $('.prev-tab').click(function() { $tabs.tabs('select', $(this).attr("rel")); return false; }); }); </script> <style> body { font-size: 75%; } #wrapper { width: 700px; margin-left: auto; margin-right: auto; } h2 { font-family: Verdana, Geneva, sans-serif; font-size: 16px; font-weight: bold; color: #000; } .tabs { margin-bottom: 6px; } #tabs .next-tab { float: right; text-decoration:none; color: #004276; font-weight: bold; } #tabs .prev-tab { float: left; text-decoration:none; color: #004276; font-weight: bold; } </style> </head> <body> <form id="gsmwissel" name="gsmwissel"> <div id="wrapper"> <div id="tabs" style="width:600px"> <ul> <li><a href="#tabs1">Stap 1</a></li> <li><a href="#tabs2">Stap 2</a></li> <li><a href="#tabs3">Stap 3</a></li> </ul> <div id="tabs1" class="tabs"> <p><label for="Naam">Naam: </label><input name="naam" id="naam" type="text"></p> </div> <div id="tabs2" class="tabs"> <p><label for="Adres">Adres: </label><input name="adres" id="adres" type="text"></p> <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p> </div> <div id="tabs3" class="tabs"> <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p> <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p> <input type="submit"> </div> </div> </div> </form> </body> </html> |