|
118 | 118 |
|
119 | 119 | //overwrite $element inputs if data-validation-group is present.
|
120 | 120 | if(groupName !== undefined){
|
121 |
| - $elements = element.find("input[data-validation-group='" + groupName + "']"); |
| 121 | + $elements = element.find("[data-validation-group='" + groupName + "']"); |
122 | 122 | }
|
123 | 123 |
|
124 | 124 | ///clear css classes from all elements.
|
|
187 | 187 | */
|
188 | 188 | $.fn.validateForm = function(language, config) {
|
189 | 189 |
|
190 |
| - language = $.extend($.formUtils.LANG, language || {}); |
| 190 | + language = $.extend($.formUtils.LANG, language || {}); |
191 | 191 | config = $.extend($.formUtils.defaultConfig(), config || {});
|
192 | 192 |
|
193 | 193 | $.formUtils.isValidatingEntireForm = true;
|
194 | 194 | $.formUtils.haltValidation = false;
|
195 |
| - |
196 |
| - /** |
197 |
| - * Adds message to error message stack if not already in the message stack |
198 |
| - * |
199 |
| - * @param {String} mess |
200 |
| - * @para {jQuery} $element |
201 |
| - */ |
202 |
| - var addErrorMessage = function(mess, $element) { |
203 |
| - // validate server side will return null as error message before the server is requested |
204 |
| - if(mess !== null) { |
205 |
| - if ($.inArray(mess, errorMessages) < 0) { |
206 |
| - errorMessages.push(mess); |
207 |
| - } |
208 |
| - errorInputs.push($element); |
209 |
| - $element |
210 |
| - .valAttr('current-error', mess) |
211 |
| - .removeClass('valid') |
212 |
| - .parent() |
213 |
| - .removeClass('has-success'); |
214 |
| - } |
215 |
| - }, |
216 |
| - |
217 |
| - /** Error messages for this validation */ |
218 |
| - errorMessages = [], |
219 |
| - |
220 |
| - /** Input elements which value was not valid */ |
221 |
| - errorInputs = [], |
| 195 | + |
| 196 | + var hasErrors = false, |
| 197 | + |
| 198 | +// /** |
| 199 | +// * Adds message to error message stack if not already in the message stack |
| 200 | +// * |
| 201 | +// * @param {String} mess |
| 202 | +// * @para {jQuery} $element |
| 203 | +// */ |
| 204 | +// var addErrorMessage = function(mess, $element) { |
| 205 | +// // validate server side will return null as error message before the server is requested |
| 206 | +// if(mess !== null) { |
| 207 | +// if ($.inArray(mess, errorMessages) < 0) { |
| 208 | +// errorMessages.push(mess); |
| 209 | +// } |
| 210 | +// errorInputs.push($element); |
| 211 | +// $element |
| 212 | +// .valAttr('current-error', mess) |
| 213 | +// .removeClass('valid') |
| 214 | +// .parent() |
| 215 | +// .removeClass('has-success'); |
| 216 | +// } |
| 217 | +// }, |
| 218 | +// |
| 219 | +// /** Error messages for this validation */ |
| 220 | +// errorMessages = [], |
| 221 | +// |
| 222 | +// /** Input elements which value was not valid */ |
| 223 | +// errorInputs = [], |
222 | 224 |
|
223 | 225 | /** Form instance */
|
224 | 226 | $form = this,
|
|
240 | 242 | //
|
241 | 243 | // Validate element values
|
242 | 244 | //
|
243 |
| - $form.find('input,textarea,select').filter(':not([type="submit"],[type="button"])').each(function() { |
244 |
| - var $element = $(this); |
| 245 | + $form.find('input,textarea,select').filter(':not([type="submit"],[type="button"],[type="hidden"])').each(function() { |
| 246 | + |
| 247 | + var $element = $(this); |
245 | 248 | var elementType = $element.attr('type');
|
246 |
| - if (!ignoreInput($element.attr('name'), elementType)) { |
247 |
| - |
248 |
| - var validation = $.formUtils.validateInput( |
249 |
| - $element, |
250 |
| - language, |
251 |
| - config, |
252 |
| - $form, |
253 |
| - 'submit' |
254 |
| - ); |
255 |
| - |
256 |
| - if(validation !== true) { |
257 |
| - addErrorMessage(validation, $element); |
258 |
| - } else { |
259 |
| - $element |
260 |
| - .valAttr('current-error', false) |
261 |
| - .addClass('valid') |
262 |
| - .parent() |
263 |
| - .addClass('has-success'); |
264 |
| - } |
265 |
| - } |
| 249 | + |
| 250 | + var element = this, |
| 251 | + groupName = $element.data("validation-group"), |
| 252 | + $elements = $([element]), |
| 253 | + $form = $element.closest("form"), |
| 254 | + requiredCnt = $element.data("data-validation-count") || 1, |
| 255 | + validCnt = 0, |
| 256 | + validation = null, |
| 257 | + validationResults = []; |
| 258 | + |
| 259 | + //load all group elements if data-validation-group is present |
| 260 | + if(groupName !== undefined){ |
| 261 | + $elements = $($form.find("input[data-validation-group='" + groupName + "']")); |
| 262 | + } |
| 263 | + |
| 264 | + //don't process if element was already processed by validation group logic. |
| 265 | + if ($elements.index($element) != 0){ |
| 266 | + return true; |
| 267 | + } |
| 268 | + |
| 269 | + $.formUtils.clearAllStatuses($elements, $form, config); |
| 270 | + |
| 271 | + for(var i=0; i<$elements.length; i++){ |
| 272 | + if (!ignoreInput($($elements[i]).attr('name'), elementType)) { |
| 273 | + |
| 274 | + var validation = $.formUtils.validateInput( |
| 275 | + $($elements[i]), |
| 276 | + language, |
| 277 | + config, |
| 278 | + $form, |
| 279 | + 'submit' |
| 280 | + ); |
| 281 | + if(validation === true) { |
| 282 | + validCnt++; |
| 283 | + } else if (validation != null) { |
| 284 | + validationResults[i] = validation; |
| 285 | + } |
| 286 | + } |
| 287 | + } |
| 288 | + |
| 289 | + if($.isBlank($elements) && groupName != null) { |
| 290 | + validation = "Enter at least " + requiredCnt + " field from " + groupName + "."; |
| 291 | + } else if (validCnt >= requiredCnt){ |
| 292 | + validation = true; |
| 293 | + } else if (validation !== undefined && validation !== null){ |
| 294 | + validation = validationResults; |
| 295 | + hasErrors = true; |
| 296 | + } |
| 297 | + |
| 298 | + $.formUtils.applyAllStatuses($elements, validation, config, language, 'submit'); |
| 299 | +// if(validation !== true) { |
| 300 | +// addErrorMessage(validation, $element); |
| 301 | +// } else { |
| 302 | +// $element |
| 303 | +// .valAttr('current-error', false) |
| 304 | +// .addClass('valid') |
| 305 | +// .parent() |
| 306 | +// .addClass('has-success'); |
| 307 | +// } |
| 308 | + |
266 | 309 |
|
267 | 310 | });
|
268 | 311 |
|
269 | 312 | //
|
270 | 313 | // Reset style and remove error class
|
271 | 314 | //
|
272 |
| - $form.find('.has-error').removeClass('has-error'); |
273 |
| - $form.find('input,textarea,select') |
274 |
| - .css('border-color', '') |
275 |
| - .removeClass(config.errorElementClass); |
| 315 | +// $form.find('.has-error').removeClass('has-error'); |
| 316 | +// $form.find('input,textarea,select') |
| 317 | +// .css('border-color', '') |
| 318 | +// .removeClass(config.errorElementClass); |
276 | 319 |
|
277 | 320 | //
|
278 | 321 | // Remove possible error messages from last validation
|
279 | 322 | //
|
280 |
| - $('.' + $.split(config.errorMessageClass, ' ').join('.')).remove(); |
281 |
| - $('.'+config.errorMessageClass).remove(); |
| 323 | +// $('.' + $.split(config.errorMessageClass, ' ').join('.')).remove(); |
| 324 | +// $('.'+config.errorMessageClass).remove(); |
282 | 325 |
|
283 | 326 | //
|
284 | 327 | // Run validation callback
|
|
293 | 336 | //
|
294 | 337 | // Validation failed
|
295 | 338 | //
|
296 |
| - if (!$.formUtils.haltValidation && errorInputs.length > 0) { |
297 |
| - |
298 |
| - // Reset form validation flag |
299 |
| - $.formUtils.isValidatingEntireForm = false; |
300 |
| - |
301 |
| - // Apply error style to invalid inputs |
302 |
| - $.each(errorInputs, function(i, $input) { |
303 |
| - if (config.borderColorOnError !== '') { |
304 |
| - $input.css('border-color', config.borderColorOnError); |
305 |
| - } |
306 |
| - $input |
307 |
| - .addClass(config.errorElementClass) |
308 |
| - .parent() |
309 |
| - .addClass('has-error'); |
310 |
| - }); |
311 |
| - |
312 |
| - // display all error messages in top of form |
313 |
| - if (config.errorMessagePosition === 'top') { |
314 |
| - var messages = '<strong>' + language.errorTitle + '</strong>'; |
315 |
| - $.each(errorMessages, function(i, mess) { |
316 |
| - messages += '<br />* ' + mess; |
317 |
| - }); |
318 |
| - |
319 |
| - // using div instead of P gives better control of css display properties |
320 |
| - $form.children().eq(0).before('<div class="' + config.errorMessageClass + ' alert alert-danger">' + messages + '</div>'); |
321 |
| - if(config.scrollToTopOnError) { |
322 |
| - $(window).scrollTop($form.offset().top - 20); |
323 |
| - } |
324 |
| - } |
325 |
| - |
326 |
| - // Display error message below input field |
327 |
| - else { |
328 |
| - $.each(errorInputs, function(i, $input) { |
329 |
| - var $parent = $input.parent(), |
330 |
| - $errorSpan = $parent.find('span[class='+config.errorMessageClass+']'); |
331 |
| - if ($errorSpan.length > 0) { |
332 |
| - $errorSpan.text(', '+$input.valAttr('current-error')); |
333 |
| - } else { |
334 |
| - $parent.append('<span class="'+config.errorMessageClass+' help-block">' + $input.valAttr('current-error') + '</span>'); |
335 |
| - } |
336 |
| - }); |
337 |
| - } |
338 |
| - return false; |
339 |
| - } |
| 339 | +// if (!$.formUtils.haltValidation && errorInputs.length > 0) { |
| 340 | +// |
| 341 | +// // Reset form validation flag |
| 342 | +// $.formUtils.isValidatingEntireForm = false; |
| 343 | +// |
| 344 | +// // Apply error style to invalid inputs |
| 345 | +// $.each(errorInputs, function(i, $input) { |
| 346 | +// if (config.borderColorOnError !== '') { |
| 347 | +// $input.css('border-color', config.borderColorOnError); |
| 348 | +// } |
| 349 | +// $input |
| 350 | +// .addClass(config.errorElementClass) |
| 351 | +// .parent() |
| 352 | +// .addClass('has-error'); |
| 353 | +// }); |
| 354 | +// |
| 355 | +// // display all error messages in top of form |
| 356 | +// if (config.errorMessagePosition === 'top') { |
| 357 | +// var messages = '<strong>' + language.errorTitle + '</strong>'; |
| 358 | +// $.each(errorMessages, function(i, mess) { |
| 359 | +// messages += '<br />* ' + mess; |
| 360 | +// }); |
| 361 | +// |
| 362 | +// // using div instead of P gives better control of css display properties |
| 363 | +// $form.children().eq(0).before('<div class="' + config.errorMessageClass + ' alert alert-danger">' + messages + '</div>'); |
| 364 | +// if(config.scrollToTopOnError) { |
| 365 | +// $(window).scrollTop($form.offset().top - 20); |
| 366 | +// } |
| 367 | +// } |
| 368 | +// |
| 369 | +// // Display error message below input field |
| 370 | +// else { |
| 371 | +// $.each(errorInputs, function(i, $input) { |
| 372 | +// var $parent = $input.parent(), |
| 373 | +// $errorSpan = $parent.find('span[class='+config.errorMessageClass+']'); |
| 374 | +// if ($errorSpan.length > 0) { |
| 375 | +// $errorSpan.text(', '+$input.valAttr('current-error')); |
| 376 | +// } else { |
| 377 | +// $parent.append('<span class="'+config.errorMessageClass+' help-block">' + $input.valAttr('current-error') + '</span>'); |
| 378 | +// } |
| 379 | +// }); |
| 380 | +// } |
| 381 | +// return false; |
| 382 | +// } |
340 | 383 |
|
341 | 384 | // Reset form validation flag
|
342 | 385 | $.formUtils.isValidatingEntireForm = false;
|
343 |
| - |
344 |
| - return !$.formUtils.haltValidation; |
| 386 | + |
| 387 | + return !hasErrors; |
345 | 388 | };
|
346 | 389 |
|
347 | 390 | /**
|
|
0 commit comments