¿Cómo puedo hacer para validar un ef_editable_numero (que el número ingresado no sea mayor al que está en la base de datos) con javascript y ajax?
En el método usado como cuarto parámetro de ajax no muestra el mensaje de error, por favor diganme que me falta.
Además el javascript me da este error:
Si tenes en PHP (previo a enviar el formulario al cliente) el valor que no se puede superar, podes indicarle al EF que trabaje dentro del rango [0…Numero] mediante este metodo.
Si estas en un ML (salvo que sea el mismo tope para todos) vas a tener que recurrir a enviar el tope en una variable global a JS y luego comparar en el evt__ef__procesar.
Estoy en un formulario ml y el tope lo da el valor que viene de una consulta a una tabla, no es un valor constante, es variable porque cada registro tiene distintos valores.
Este es el código del método ajax que devuelve el importe:
function ajax__get_importe($parametros, toba_ajax_respuesta $respuesta)
{
$id_aporte = quote($parametros['id_aporte']);
$id_concepto = quote($parametros['id_concepto']);
$sql = "select importe from aportes_pendientes where id_aporte=$id_aporte and "
."id_concepto=$id_concepto";
$aporte_pendiente = consultar_fuente($sql);
$respuesta->set($aporte_pendiente);
}
Y este es el código de la extensión del formulario_ml:
<?php
class form_ml_aportes extends sindicato_ei_formulario_ml
{
//-----------------------------------------------------------------------------------
//---- JAVASCRIPT -------------------------------------------------------------------
//-----------------------------------------------------------------------------------
function extender_objeto_js()
{
echo "
//---- Procesamiento de EFs --------------------------------
{$this->objeto_js}.evt__importe__procesar = function(es_inicial, fila)
{
var id_aporte = this.ef('id_aporte').ir_a_fila(fila).get_estado();
var id_concepto = this.ef('id_concepto').ir_a_fila(fila).get_estado();
if(id_aporte != apex_ef_no_seteado && id_concepto != apex_ef_no_seteado)
{
var parametros = {'id_aporte': id_aporte, 'id_concepto': id_concepto};
this.controlador.ajax('get_importe', parametros, this, this.atender_respuesta);
}
}
{$this->objeto_js}.atender_respuesta = function(data)
{
var ef_importe = this.ef('importe');
var importe = ef_importe.get_estado();
var enviar = true;
if(data){
if(importe > data[0].importe){
ef_importe.set_error('Debe ingresar un importe menor o igual a ' + data[0].importe.toString());
ef_importe.set_estado(data[0].importe);
enviar = false;
}
}
return enviar;
}
";
}
}
?>
Por favor decime si está bien lo que estoy haciendo o como tengo que corregirlo.
Ahí funcionó, cuando le quito el foco a cada ef_importe me hace la validación, muestra el mensaje de error que le pongo y me pone el importe correcto que debe tener ese ef si el importe ingresado es mayor al que tiene en la tabla