supporter: Improve amount validation JavaScript.
* Check validity on page load and store it in a data attribute so we can change validity state more accurately. * Clear invalid state on any change.
This commit is contained in:
		
							parent
							
								
									9d855fda08
								
							
						
					
					
						commit
						ba0df40639
					
				
					 1 changed files with 24 additions and 11 deletions
				
			
		|  | @ -11,11 +11,13 @@ var flipClass = function(elem, byeClass, hiClass) { | ||||||
|     classList.add(hiClass); |     classList.add(hiClass); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var amountIsValid = function(amountInput) { | var checkAmountValid = function(amountInput) { | ||||||
|     var value = parseFloat(amountInput.value); |     var value = parseFloat(amountInput.value); | ||||||
|     var min = parseFloat(amountInput.min); |     var min = parseFloat(amountInput.min); | ||||||
|     /* Is the value is a valid float, it will stringify back to itself. */ |     /* Is the value is a valid float, it will stringify back to itself. */ | ||||||
|     return (String(value) === amountInput.value) && (value >= min); |     var isValid = (String(value) === amountInput.value) && (value >= min); | ||||||
|  |     amountInput.dataset.valid = isValid ? '1' : '0'; | ||||||
|  |     return isValid; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var supportTypeSelector = function(supportTypeHash) { | var supportTypeSelector = function(supportTypeHash) { | ||||||
|  | @ -40,24 +42,35 @@ $(document).ready(function() { | ||||||
|     // Forms start in "invalid" form, with the errors shown, so that
 |     // Forms start in "invalid" form, with the errors shown, so that
 | ||||||
|     // non-Javascript users see the errors by default and know what they must
 |     // non-Javascript users see the errors by default and know what they must
 | ||||||
|     // enter.  Now we hide those for JavaScript users:
 |     // enter.  Now we hide those for JavaScript users:
 | ||||||
|     $('.form-error').addClass('hidden'); |  | ||||||
|     var $formCorrectionNeeded = $('#form-correction-needed'); |     var $formCorrectionNeeded = $('#form-correction-needed'); | ||||||
|  |     $formCorrectionNeeded.addClass('hidden'); | ||||||
| 
 | 
 | ||||||
|     $('form.supporter-form input[type=number]').on('focusout', function(event) { |     $('form.supporter-form input[type=number]').on('input', function(event) { | ||||||
|  |         event.target.classList.remove('invalid'); | ||||||
|  |     }).on('focusout', function(event) { | ||||||
|         var amountInput = event.target; |         var amountInput = event.target; | ||||||
|         var wasValid = !amountInput.classList.contains('invalid'); |         var wasValid = amountInput.dataset.valid === '1'; | ||||||
|         var isValid = amountIsValid(amountInput); |         var isValid = checkAmountValid(amountInput); | ||||||
|         if (!wasValid && isValid) { |         if (isValid) { | ||||||
|             flipClass(amountInput, 'invalid', 'valid'); |             flipClass(amountInput, 'invalid', 'valid'); | ||||||
|             $('.form-error', amountInput.parentNode).addClass('hidden'); |             if (!wasValid) { | ||||||
|         } else if (wasValid && !isValid) { |                 $('.form-error', amountInput.parentNode).fadeOut(); | ||||||
|  |             } | ||||||
|  |         } else if (wasValid) { | ||||||
|             flipClass(amountInput, 'valid', 'invalid'); |             flipClass(amountInput, 'valid', 'invalid'); | ||||||
|             $('.form-error', amountInput.parentNode).removeClass('hidden'); |             $('.form-error', amountInput.parentNode).fadeIn(); | ||||||
|  |         } | ||||||
|  |     }).each(function(index, elem) { | ||||||
|  |         if (checkAmountValid(elem)) { | ||||||
|  |             $('.form-error', elem.parentNode).addClass('hidden'); | ||||||
|  |         } else { | ||||||
|  |             elem.classList.add('invalid'); | ||||||
|  |             $('.form-error', elem.parentNode).removeClass('hidden'); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     $('form.supporter-form').on('submit', function(event) { |     $('form.supporter-form').on('submit', function(event) { | ||||||
|         if (amountIsValid($('input[name=amount]', event.target)[0])) { |         if (checkAmountValid($('input[name=amount]', event.target)[0])) { | ||||||
|             $formCorrectionNeeded.addClass('hidden'); |             $formCorrectionNeeded.addClass('hidden'); | ||||||
|         } else { |         } else { | ||||||
|             $formCorrectionNeeded.removeClass('hidden') |             $formCorrectionNeeded.removeClass('hidden') | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Brett Smith
						Brett Smith