 
         body.on 'click', ':disabled', (e) -> e.preventDefault()
 
-        body.on 'keyup', ':input.drm-valid-integer', ->
+        body.on 'keyup, change', ':input.drm-valid-integer', ->
             value = self.getValue.call @
             validate = self.validateInteger value, patterns.integer
             if validate?
                 validateField.call @, value, validate
 
-        body.on 'keyup', ':input.drm-valid-number', ->
+        body.on 'keyup, change', ':input.drm-valid-number', ->
             value = self.getValue.call @
             validate = self.validateNumber value, patterns.number
             if validate?
                 validateField.call @, value, validate
 
-        body.on 'keyup', ':input.drm-valid-url', ->
+        body.on 'keyup, change', ':input.drm-valid-url', ->
             value = self.getValue.call @
             validate = self.validateURL value, patterns.url
             if validate?
                 validateField.call @, value, validate
 
-        body.on 'keyup', ':input.drm-valid-phone', ->
+        body.on 'keyup, change', ':input.drm-valid-phone', ->
             value = self.getValue.call @
             validate = self.validatePhone value, patterns.phone
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-email', ->
+        body.on 'keyup, change', ':input.drm-valid-email', ->
             value = self.getValue.call @
             validate = self.validateEmail value, patterns.email
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-full-name', ->
+        body.on 'keyup, change', ':input.drm-valid-full-name', ->
             value = self.getValue.call @
             validate = self.validateFullName value, patterns.fullName
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-alpha', ->
+        body.on 'keyup, change', ':input.drm-valid-alpha', ->
             value = self.getValue.call @
             validate = self.validateAlpha value, patterns.alpha
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-alphanum', ->
+        body.on 'keyup, change', ':input.drm-valid-alphanum', ->
             value = self.getValue.call @
             validate = self.validateAlphaNum value, patterns.alphaNum
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-alphadash', ->
+        body.on 'keyup, change', ':input.drm-valid-alphadash', ->
             value = self.getValue.call @
             validate = self.validateAlphaNumDash value, patterns.alphaNumDash
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-alpha-num-underscore', ->
+        body.on 'keyup, change', ':input.drm-valid-alpha-num-underscore', ->
             value = self.getValue.call @
             validate = self.validateAlphaNumUnderscore value, patterns.alphaNumUnderscore
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-no-spaces', ->
+        body.on 'keyup, change', ':input.drm-valid-no-spaces', ->
             value = self.getValue.call @
             validate = self.validateNoSpaces value, patterns.noSpaces
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-no-tags', ->
+        body.on 'keyup, change', ':input.drm-valid-no-tags', ->
             value = self.getValue.call @
             validate = self.validateNoTags value, patterns.noTags
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-credit-card', ->
+        body.on 'keyup, change', ':input.drm-valid-credit-card', ->
             value = self.getValue.call @
             validate = self.validateCreditCard value, patterns.creditCard
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-cvv', ->
+        body.on 'keyup, change', ':input.drm-valid-cvv', ->
             value = self.getValue.call @
             validate = self.validateCvv value, patterns.cvv
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-zip', ->
+        body.on 'keyup, change', ':input.drm-valid-zip', ->
             value = self.getValue.call @
             validate = self.validateZip value, patterns.zip
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-month-day-year', ->
+        body.on 'keyup, change', ':input.drm-valid-month-day-year', ->
             value = self.getValue.call @
             validate = self.validateMonthDayYear value, patterns.monthDayYear
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input.drm-valid-time', ->
+        body.on 'keyup, change', ':input.drm-valid-time', ->
             value = self.getValue.call @
             validate = self.validateTime value, patterns.time
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-max-value]:not([data-min-value])', ->
+        body.on 'keyup, change', ':input[data-max-value]:not([data-min-value])', ->
             value = self.getValue.call @
             validate = self.validateMaxValue.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-min-value]:not([data-max-value])', ->
+        body.on 'keyup, change', ':input[data-min-value]:not([data-max-value])', ->
             value = self.getValue.call @
             validate = self.validateMinValue.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-max-length]:not([data-min-length])', ->
+        body.on 'keyup, change', ':input[data-max-length]:not([data-min-length])', ->
             value = self.getValue.call @
             validate = self.validateMaxLength.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-min-length]:not([data-max-length])', ->
+        body.on 'keyup, change', ':input[data-min-length]:not([data-max-length])', ->
             value = self.getValue.call @
             validate = self.validateMinLength.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-min-value][data-max-value]', ->
+        body.on 'keyup, change', ':input[data-min-value][data-max-value]', ->
             value = self.getValue.call @
             validate = self.validateBetweenValue.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-min-length][data-max-length]', ->
+        body.on 'keyup, change', ':input[data-min-length][data-max-length]', ->
             value = self.getValue.call @
             validate = self.validateBetweenLength.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-equal]', ->
+        body.on 'keyup, change', ':input[data-equal]', ->
             value = self.getValue.call @
             validate = self.validateEqual.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-not-equal]', ->
+        body.on 'keyup, change', ':input[data-not-equal]', ->
             value = self.getValue.call @
             validate = self.validateNotEqual.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-in-list]', ->
+        body.on 'keyup, change', ':input[data-in-list]', ->
             value = self.getValue.call @
             validate = self.validateInList.call @, value
             if validate?
                 validateField.call @, value, validate
         
-        body.on 'keyup', ':input[data-not-list]', ->
+        body.on 'keyup, change', ':input[data-not-list]', ->
             value = self.getValue.call @
             validate = self.validateNotList.call @, value
             if validate?
                 validateField.call @, value, validate
 
-        body.on 'keyup', ":input[type='text'], :input[type='url'], :input[type='email'], :input[type='password'], :input[type='tel'], textarea", ->
+        body.on 'keyup, change', ":input[type='text'], :input[type='url'], :input[type='email'], :input[type='password'], :input[type='tel'], textarea", ->
             value = self.getValue.call @
             validate = self.trackLength.call @, value
             if validate.message?

            else
                requiredFieldId = _requiredWith

            _evaluate = (value, requiredFieldId, fieldValue) ->
                # if criteria is met then required field must be filled out
                fieldId = _that.attr 'id'
                requiredField = $ "##{requiredFieldId}"
                requiredFieldValue = $.trim requiredField.val()

                _checkValue = ->
                    if not requiredFieldValue
                        validate.status = 'danger'
                        validate.message = "#{requiredFieldId} is required with #{fieldId}"
                    else
                        validate.message = null
                        validate.status = 'success'
                    validate

                if not value
                    console.log 'do nothing'
                else if fieldValue? and (value is fieldValue)
                    _checkValue()
                else if value.length > 0 and (not fieldValue?)
                    _checkValue()
                
                validate

            _evaluate value, requiredFieldId, fieldValue
        else if _requireWith
            validate =
                status: null
                message: null
                issuer: 'requireWith'

            if _requireWith.search(':') isnt -1
                _requireWith = _requireWith.split ':'

            else
                requireFieldId = _requireWith

        _evaluate = (value, requiredFieldId, fieldValue) ->
            # if criteria is met then required field must be filled out
            fieldId = _that.attr 'id'
            requiredField = $ "##{requiredFieldId}"
            requiredFieldValue = $.trim requiredField.val()

            _checkValue = ->
                if not requiredFieldValue
                    validate.status = 'danger'
                    validate.message = "#{requiredFieldId} is required with #{fieldId}"
                else
                    validate.message = null
                    validate.status = 'success'
                validate

            if not value
                console.log 'do nothing'
            else if fieldValue? and (value is fieldValue)
                _checkValue()
            else if value.length > 0 and (not fieldValue?)
                _checkValue()
            
            validate

        _evaluate value, requiredFieldId, fieldValue

            # _evaluate = (value, requireFieldId, fieldValue) ->
            #     # if criteria is met then required field must be filled out
            #     fieldId = _that.attr 'id'
            #     requireField = $ "##{requireFieldId}"
            #     requireFieldValue = $.trim requireField.val()

            #     _checkValue = ->
            #         if not value
            #             validate.status = 'danger'
            #             validate.message = "#{fieldId} is required with #{requireFieldId}"
            #         else
            #             validate.message = null
            #             validate.status = 'success'
            #         validate

            #     if not requireFieldValue
            #         console.log 'do nothing'
            #     else if fieldValue? and (requireFieldValue is fieldValue)
            #         _checkValue()
            #     else if requireFieldValue.length > 0 and (not fieldValue?)
            #         _checkValue()
                
            #     validate

            # _evaluate value, requireFieldId, fieldValue
            
    validateAllowedWith: (value) ->
        _that = $ @
        _allowedWith = _that.data 'allowed-with'
