2010-03-11 12 views
10

Estoy usando Jeditable (publicando en CakePHP) para la entrada en mi página. Quiero que los usuarios solo completen los números en los campos Jeditables, así que mi idea era usar también el jQuery validation plugin para validar si solo se usan números, ya lo uso en otras partes de mi sitio.Validar campo Jeditable

Jeditable crea dinámicamente un formulario con una entrada al hacer clic en el div, por lo que parece que no hay nada para que Jquery valide la vinculación y no parece funcionar normalmente.

Soy capaz de establecer el nombre de clase del formulario a través de Jeditable (solo tiene una clase atrribute), la entrada creada solo tiene un atributo de nombre que por defecto es "name".

Mis preguntas:

  • ¿Es esta una buena manera de requerir sólo números?
  • Si es así, cómo hacer que funcione con Jquery validar
  • Si no, ¿cuál sería una solución mejor?

Gracias de antemano, y espero con interés las respuestas que podría conseguir;)

Respuesta

13

Puede usar el complemento de validación jQuery directamente en jeditable para validar los campos de su formulario

$('.edit').editable(your_url, { 
    onsubmit: function(settings, td) { 
     var input = $(td).find('input'); 
     $(this).validate({ 
      rules: { 
       'nameofinput': { 
        number: true 
       } 
      }, 
      messages: { 
       'actionItemEntity.name': { 
        number: 'Only numbers are allowed' 

       } 

      } 
     }); 

     return ($(this).valid()); 
    } 
}); 
+0

Usted declara la entrada pero no usarlo, ¿cuál es el punto? –

3

Usted puede utilizar el evento onsubmit en Jeditable y comprobar si la entrada tiene sólo números. Esto es sólo un ejemplo, yo no lo probé:

function isNumeric(value) { 
    if (value == null || !value.toString().match(/^[-]?\d*\.?\d*$/)) return false; 
    return true; 
} 

$('.edit').editable(your_url, { 
    onsubmit: function(settings, original) { 
     if (isNumeric(original)) { 
      return true; 
     } else { 
      //display your message 
      return false; 
     } 
    } 
}); 
+0

Gracias, yo no tenía tiempo para probar realmente que, en mis primeros intentos no funcionó (siempre devolvió el mensaje falso) pero, como dije, no tuve tiempo de probarlo, ¡muchas gracias por su respuesta! :) – JanWillem

+0

Parece que presenta Jeditable si devuelve falso de todos modos: http://markmail.org/message/cgagaclwtk6bt4yv El cambio de código indicado en la URL ya no está disponible :(Espero que alguien me puede ayudar a conseguir ¡esto funciona! – JanWillem

+0

Esto funciona en la versión actual de jEditable. –

10

el código que funcionó para mí

function isNumeric(value) { 
    if (value == null || !value.toString().match(/^[-]?\d*\.?\d*$/)) return false; 
    return true; 
} 

$('.edit').editable(your_url, { 
    onsubmit: function(settings, td) { 
     var input = $(td).find('input'); 
     var original = input.val(); 
     if (isNumeric(original)) { 
      console.log("Validation correct"); 
      return true; 
     } else { 
      console.log("Validation failed. Ignoring"); 
      input.css('background-color','#c00').css('color','#fff'); 
      return false; 
     } 
    } 
}); 
+0

Oooh. Usando console.log * como * – jonasespelita

+0

$ (td) .find ('entrada'); ¿es necesario solo para datos de tabla? – shennyL

0

Para mi proyecto, he cambiado el nombre de la función a es aceptable porque dejo que los paréntesis, guiones, puntos sean parte del número de teléfono.

function isAcceptable(value) { 
    if (value == null || !value.toString().match(/^[-+]?\d*\.?[\d\s().-]+$/)) return false; 
    return true; 
} 
-1

jquery.editable.js abiertos y encontrar: función onedit

/* setup some functions */ 
     var onedit = settings.onedit || function() { }; 

y hacer algo como:

$('.edit').editable(your_url, { 
    onedit:function(){ 
      alert("original value"+$(this).text()); 
    }, 
}); 
Cuestiones relacionadas