function keyDown (e) {
      if (e.target.value === '' && e.target !== hex && ((bindedHex && e.target !== bindedHex) || !bindedHex)) return undefined
      if (!validateKey(e)) return e
      switch (e.target) {
        case red:
          switch (e.keyCode) {
            case 38:
              red.value = setValueInRange.call(that, (red.value << 0) + 1, 0, 255)
              color.val('r', red.value, e.target)
              return false
            case 40:
              red.value = setValueInRange.call(that, (red.value << 0) - 1, 0, 255)
              color.val('r', red.value, e.target)
              return false
          }
          break
        case green:
          switch (e.keyCode) {
            case 38:
              green.value = setValueInRange.call(that, (green.value << 0) + 1, 0, 255)
              color.val('g', green.value, e.target)
              return false
            case 40:
              green.value = setValueInRange.call(that, (green.value << 0) - 1, 0, 255)
              color.val('g', green.value, e.target)
              return false
          }
          break
        case blue:
          switch (e.keyCode) {
            case 38:
              blue.value = setValueInRange.call(that, (blue.value << 0) + 1, 0, 255)
              color.val('b', blue.value, e.target)
              return false
            case 40:
              blue.value = setValueInRange.call(that, (blue.value << 0) - 1, 0, 255)
              color.val('b', blue.value, e.target)
              return false
          }
          break
        case alpha:
          switch (e.keyCode) {
            case 38:
              alpha.value = setValueInRange.call(that, Number.parseFloat(alpha.value) + 1, 0, 100)
              color.val('a', toFixedNumeric((alpha.value * 255) / 100, alphaPrecision), e.target)
              return false
            case 40:
              alpha.value = setValueInRange.call(that, Number.parseFloat(alpha.value) - 1, 0, 100)
              color.val('a', toFixedNumeric((alpha.value * 255) / 100, alphaPrecision), e.target)
              return false
          }
          break
        case hue:
          switch (e.keyCode) {
            case 38:
              hue.value = setValueInRange.call(that, (hue.value << 0) + 1, 0, 360)
              color.val('h', hue.value, e.target)
              return false
            case 40:
              hue.value = setValueInRange.call(that, (hue.value << 0) - 1, 0, 360)
              color.val('h', hue.value, e.target)
              return false
          }
          break
        case saturation:
          switch (e.keyCode) {
            case 38:
              saturation.value = setValueInRange.call(that, (saturation.value << 0) + 1, 0, 100)
              color.val('s', saturation.value, e.target)
              return false
            case 40:
              saturation.value = setValueInRange.call(that, (saturation.value << 0) - 1, 0, 100)
              color.val('s', saturation.value, e.target)
              return false
          }
          break
        case value:
          switch (e.keyCode) {
            case 38:
              value.value = setValueInRange.call(that, (value.value << 0) + 1, 0, 100)
              color.val('v', value.value, e.target)
              return false
            case 40:
              value.value = setValueInRange.call(that, (value.value << 0) - 1, 0, 100)
              color.val('v', value.value, e.target)
              return false
          }
          break
      }
      return undefined
    }
@param {Event} e
@returns {Event|false|void}