2012-05-30 12 views
5

Estoy trabajando en this plugin y recibí un informe de error que decía que había algunos problemas con Android 2.3.Android: las entradas de texto no validan con el complemento de validación personalizado

Descargué el SDK de Android y probé el complemento en 2.3 y lo que parece suceder es que las entradas de texto no se validan y el error no se muestra o tiene errores. Otras entradas validan bien. Intenté en Android 4.0+ y parece estar funcionando bien. No sé por dónde empezar, ya que no sé de dónde viene el problema y no tengo un teléfono Android real para depurar estas cosas, y el emulador carece de herramientas de desarrollo y esas cosas.

Dudo que publicar un volcado de código aquí ayude, pero este es el método validate() que se puede encontrar en js/idealforms.js. El "error" debe provenir de aquí o de otro lugar en ese archivo, a menos que esté relacionado con CSS, lo que no creo.

/** Validates an input 
* @memberOf Actions 
* @param {object} input Object that contains the jQuery input object [input.input] 
* and the user options of that input [input.userOptions] 
* @param {string} value The value of the given input 
* @returns {object} Returns [isValid] plus [error] if it fails 
*/ 
validate: function (input, value) { 

    var isValid = true, 
     error = '', 
     $input = input.input, 
     userOptions = input.userOptions, 
     userFilters = userOptions.filters 

    if (userFilters) { 

    // Required 
    if (!value && /required/.test(userFilters)) { 
     error = (
     userOptions.errors && userOptions.errors.required 
      ? userOptions.errors.required 
      : 'This field is required.' 
    ) 
     isValid = false 
    } 

    // All other filters 
    if (value) { 
     userFilters = userFilters.split(/\s/) 
     for (var i = 0, len = userFilters.length; i < len; i++) { 
     var uf = userFilters[i], 
      theFilter = typeof Filters[uf] === 'undefined' ? '' : Filters[uf], 
      isFunction = typeof theFilter.regex === 'function', 
      isRegex = theFilter.regex instanceof RegExp 
     if (
      theFilter && (
      isFunction && !theFilter.regex(input, value) || 
      isRegex && !theFilter.regex.test(value) 
     ) 
     ) { 
      isValid = false 
      error = (
      userOptions.errors && userOptions.errors[uf] || 
      theFilter.error 
     ) 
      break 
     } 
     } 
    } 

    } 

    return { 
    isValid: isValid, 
    error: error 
    } 
} 

¿Alguien puede ayudarme? Quiero hacer que este complemento funcione en tantas plataformas como sea posible, pero es difícil hacerlo sin tener un teléfono Android real.

Respuesta

1

¿Es ese el código actual?

No puedo señalar a nada específico que causaría su problema, pero a veces estos tipos de errores son causados ​​por peculiaridades en la versión específica del navegador por lo que hay algunas cosas que me gustaría comprobar:

(1) Yo sé los puntos y comas son supuestamente "opcionales" en Javascript, pero he visto comportamientos extravagantes en algunos navegadores (especialmente los móviles, esto se aprende de la experiencia) si no los incluyes. Yo los agregaría después de cada declaración.

(2) Veo que se refieren a una variable Filtros aquí:

 theFilter = typeof Filters[uf] === 'undefined' ? '' : Filters[uf], 

Quizás quiso decir userFilters ... o son los filtros de una variable global no se muestra aquí?

(3) Esta declaración de variable:

$input = input.input, 

¿Está realmente sentido a llamar a la entrada de $ variable? No se usa en ninguna parte.

(4) Cuando utiliza & & y || juntos indicaría explícitamente las agrupaciones por medio de paréntesis:

if (
     theFilter && (
     isFunction && !theFilter.regex(input, value) || 
     isRegex && !theFilter.regex.test(value) 
    ) 
    ) 

    error = (
    userOptions.errors && userOptions.errors[uf] || 
    theFilter.error 
) 

Espero que esto ayude.

+0

** 1: ** Intenté eso, pero no hizo la diferencia. Sin embargo, estoy poniendo todo en un solo archivo, así que dudo que este sea el problema. ** 2: ** 'Filters' no es global, pero está dentro de un alcance mayor. No creo que el problema esté aquí tampoco. ** 3: ** '$ input' es local, no hay conflictos aquí. ** 4: ** Aunque el problema podría estar aquí, intenté reorganizarlo de una manera más "tradicional" pero el problema persiste ... Parece que este error es difícil de detectar ... Estoy pensando que podría ser un error con el navegador de Android en lugar de mi código real. Tal vez hay una forma de evitarlo ... quién sabe. Gracias de cualquier manera. +1 – elclanrs

Cuestiones relacionadas